在 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 参数有用值的几个示例。

先决条件

内存不足时生成堆转储

当你遇到内存不足错误时,使用以下 --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>

后续步骤