手动捕获堆转储和线程转储并在 Azure Spring Apps 中使用 Java Flight Recorder

注意

Azure Spring Apps 是 Azure Spring Cloud 服务的新名称。 虽然该服务有新名称,但一些地方仍会使用旧名称,我们仍在更新屏幕截图、视频和图形等资产。

本文介绍如何手动生成堆转储或线程转储,以及如何启动 Java Flight Recorder (JFR)。

有效的故障排除对于确保你能够解决方法生产环境中的问题并保持业务在线至关重要。 Azure Spring Apps 提供应用程序日志流和查询、发出富指标、警报和分布式跟踪等。 但是,当你收到有关具有高延迟、JVM 堆泄漏或 CPU 使用率高的请求的警报时,没有“最后一英里”的解决方案。 出于这个原因,我们为你提供了手动生成堆转储、生成线程转储和启动 JFR 的功能。

先决条件

生成堆转储

使用以下命令在 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 中生成应用的堆或线程转储。

  1. 在 Azure 门户中,导航到目标应用,然后选择“故障排除”。

    Screenshot of the Azure portal showing the app Overview page with the Troubleshooting button highlighted.

  2. 在“故障排除”窗格中,选择要收集的应用实例和转储类型。

    Screenshot of the Azure portal Troubleshooting pane.

  3. 在“文件路径”字段中,指定持久性存储的装载路径。

  4. 选择“收集”。

获取诊断文件

导航到持久存储中的目标文件路径并找到你的转储/JFR。 从该路径中,你可以将其下载到本地计算机。 对于堆转储,生成的文件名类似于 <app-instance>_heapdump_<time-stamp>.hprof,对于线程转储,类似于 <app-instance>_threaddump_<time-stamp>.txt,对于 JFR 文件,则类似于 <app-instance>_JFR_<time-stamp>.jfr

后续步骤