在 Azure Spring Apps 中使用 JVM 选项的诊断设置进行高级故障排除
注意
基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。
本文介绍如何通过 JVM 选项使用诊断设置在 Azure Spring Apps 中进行高级故障排除。
有几个基于 JVM 的应用程序启动参数与堆转储、Java Flight Recorder (JFR) 和垃圾回收 (GC) 日志相关。 在 Azure Spring Apps 中,我们支持使用 JVM 选项进行 JVM 配置。
有关配置基于 JVM 的应用程序启动参数的详细信息,请参阅 Azure CLI 参考文档中的 az spring 应用部署。 以下部分提供了 --jvm-options
参数有用值的几个示例。
先决条件
- 部署的 Azure Spring Apps 服务实例。 按有关如何通过 Azure CLI 来部署应用的快速入门操作即可入门。
- 至少已在该服务实例中创建一个应用程序。
- 你自己的持久存储,如如何在 Azure Spring Apps 中启用你自己的持久存储中所述。 此存储用于保存生成的诊断文件。 你在以下参数值中提供的路径应位于绑定到你的应用的持久存储的装载路径下。 如果要使用装载路径下的路径,请务必事先创建子路径。
内存不足时生成堆转储
当你遇到内存不足错误时,使用以下 --jvm-options
参数生成堆转储。
--jvm-options="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path-to-heap-dump-folder>"
除了指定堆转储文件夹的路径之外,还可以提供特定的文件名。 但是,我们强烈建议你改为提供文件夹路径。 如果你提供文件名,由于 HPROF 文件格式的限制,该命令将仅为第一个内存不足错误生成堆转储。 如果你提供文件夹路径,你将在一个文件中获得一个堆转储,该文件具有为每个内存不足错误自动生成的名称。
生成 GC 日志
使用以下 --jvm-options
参数生成 GC 日志。 有关详细信息,请参阅官方 JVM 文档。
--jvm-options="-XX:+PrintGCDetails -Xloggc:<path-to-GC-log-file>"
退出时生成 JFR 文件
使用以下 --jvm-options
参数生成 JFR 文件。 有关详细信息,请参阅官方 JVM 文档。
--jvm-options="-XX:StartFlightRecording=dumponexit=true,filename=<path-to-JFR-file>"
配置生成的文件的路径
为确保你可以访问你的文件,请确保生成文件的目标路径位于绑定到你的应用的持久存储中。 例如,在 Azure Spring Apps 中创建持久存储时,可以使用类似于以下示例的 JSON。
{
"customPersistentDisks": [
{
"storageName": "<storage-resource-name>",
"customPersistentDiskProperties": {
"type": "AzureFileVolume",
"shareName": "<azure-file-share-name>",
"mountPath": "<unique-mount-path>",
"mountOptions": [
"uid=0",
"gid=0"
],
"readOnly": false
}
},
{
"storageName": "<storage-resource-name>",
"customPersistentDiskProperties": {
"type": "AzureFileVolume",
"shareName": "<azure-file-share-name>",
"mountPath": "<unique-mount-path>",
"readOnly": true
}
}
]
}
或者,你可以使用以下命令附加到持久存储。
az spring app append-persistent-storage \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name <app-name> \
--persistent-storage-type AzureFileVolume \
--storage-name <storage-resource-name> \
--share-name <azure-file-share-name> \
--mount-path <unique-mount-path>