使用 JVM 選項的診斷設定,在 Azure Spring Apps 中進階疑難解答

注意

基本標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告

標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps

本文適用於: ✔️ Java ❌ C#

本文適用於: ✔️ 基本/標準 ✔️ 企業

本文說明如何透過 JVM 選項使用診斷設定,在 Azure Spring Apps 中進行進階疑難解答。

堆積傾印、Java Flight Recorder (JFR) 和垃圾收集 (GC) 記錄有數個以 JVM 為基礎的應用程式啟動參數。 在 Azure Spring Apps 中,我們支援使用 JVM 選項的 JVM 設定。

如需設定 JVM 型應用程式啟動參數的詳細資訊,請參閱 Azure CLI 參考檔中的 az spring app deployment 。 下列各節提供數個參數實用值的 --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>

下一步