手动捕获堆转储和线程转储并在 Azure Spring Apps 中使用 Java Flight Recorder
注意
基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。
本文介绍如何手动生成堆转储或线程转储,以及如何启动 Java Flight Recorder (JFR)。
有效的故障排除对于确保你能够解决方法生产环境中的问题并保持业务在线至关重要。 Azure Spring Apps 提供应用程序日志流和查询、发出富指标、警报和分布式跟踪等。 但是,当你收到有关具有高延迟、JVM 堆泄漏或 CPU 使用率高的请求的警报时,没有“最后一英里”的解决方案。 出于这个原因,我们为你提供了手动生成堆转储、生成线程转储和启动 JFR 的功能。
先决条件
- 部署的 Azure Spring Apps 服务实例。 若要开始使用,请参阅快速入门:在 Azure Spring Apps 中部署第一个应用程序。
- 至少已在该服务实例中创建一个应用程序。
- 你自己的持久存储,如如何在 Azure Spring Apps 中启用你自己的持久存储中所述。 此存储用于保存生成的诊断文件。 你在以下参数值中提供的路径应位于绑定到你的应用的持久存储的装载路径下。 如果要使用装载路径下的路径,请务必事先创建子路径。
生成堆转储
使用以下命令在 Azure Spring Apps 中生成应用的堆转储。
az spring app deployment generate-heap-dump \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--app <app-name> \
--deployment <deployment-name> \
--app-instance <app-instance name> \
--file-path <your-target-file-path-in-your-persistent-storage-mount-path>
生成线程转储
使用以下命令在 Azure Spring Apps 中生成应用的线程转储。
az spring app deployment generate-thread-dump \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--app <app-name> \
--deployment <deployment-name> \
--app-instance <app-instance name> \
--file-path <your-target-file-path-in-your-persistent-storage-mount-path>
启动 JFR
使用以下命令在 Azure Spring Apps 中为你的应用启动 JFR。
az spring app deployment start-jfr \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--app <app-name> \
--deployment <deployment-name> \
--app-instance <app-instance name> \
--file-path <your-target-file-path-in-your-persistent-storage-mount-path> \
--duration <duration-of-JFR>
duration
的默认值为 60 秒。
使用 Azure 门户生成转储
使用以下步骤在 Azure Spring Apps 中生成应用的堆或线程转储。
获取诊断文件
导航到持久存储中的目标文件路径并找到你的转储/JFR。 从该路径中,你可以将其下载到本地计算机。 对于堆转储,生成的文件名类似于 <app-instance>_heapdump_<time-stamp>.hprof
,对于线程转储,类似于 <app-instance>_threaddump_<time-stamp>.txt
,对于 JFR 文件,则类似于 <app-instance>_JFR_<time-stamp>.jfr
。