Używanie ustawień diagnostycznych opcji JVM na potrzeby zaawansowanego rozwiązywania problemów w usłudze Azure Spring Apps

Uwaga

Plany Podstawowa, Standardowa i Enterprise zostaną wycofane od połowy marca 2025 r. z 3-letnim okresem emerytalnym. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.

Zużycie standardowe i dedykowany plan zostaną wycofane od 30 września 2024 r. z całkowitym zamknięciem po sześciu miesiącach. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz Migrowanie użycia usługi Azure Spring Apps w warstwie Standardowa i dedykowanego planu do usługi Azure Container Apps.

Ten artykuł dotyczy: ✔️ Java ❌ C#

Ten artykuł dotyczy: ✔️ Podstawowa/Standardowa ✔️ Enterprise

W tym artykule pokazano, jak używać ustawień diagnostycznych za pomocą opcji JVM do przeprowadzania zaawansowanego rozwiązywania problemów w usłudze Azure Spring Apps.

Istnieje kilka parametrów uruchamiania aplikacji opartych na maszynie JVM związanych z zrzutem stert, rejestratorem lotów Java (JFR) i dziennikami odzyskiwania pamięci (GC). W usłudze Azure Spring Apps obsługujemy konfigurację maszyny JVM przy użyciu opcji JVM.

Aby uzyskać więcej informacji na temat konfigurowania parametrów uruchamiania aplikacji opartych na maszynie JVM, zobacz az spring app deployment w dokumentacji referencyjnej interfejsu wiersza polecenia platformy Azure. W poniższych sekcjach przedstawiono kilka przykładów przydatnych wartości parametru --jvm-options .

Wymagania wstępne

Generowanie zrzutu stert w przypadku braku pamięci

Użyj następującego --jvm-options parametru, aby wygenerować zrzut stert w przypadku wystąpienia błędu braku pamięci.

--jvm-options="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path-to-heap-dump-folder>"

Alternatywą dla określenia ścieżki do folderu zrzutu sterty można podać określoną nazwę pliku. Jednak zdecydowanie zalecamy podanie ścieżki folderu. Jeśli podasz nazwę pliku, polecenie wygeneruje zrzut stert tylko dla pierwszego błędu poza pamięcią, ze względu na ograniczenia formatu pliku HPROF. Jeśli podasz ścieżkę folderu, otrzymasz zrzut sterty w pliku z automatycznie wygenerowaną nazwą dla każdego błędu braku pamięci.

Generowanie dzienników GC

Użyj następującego --jvm-options parametru, aby wygenerować dzienniki GC. Aby uzyskać więcej informacji, zobacz oficjalną dokumentację JVM.

--jvm-options="-XX:+PrintGCDetails -Xloggc:<path-to-GC-log-file>"

Generowanie pliku JFR podczas zamykania

Użyj następującego --jvm-options parametru, aby wygenerować plik JFR. Aby uzyskać więcej informacji, zobacz oficjalną dokumentację JVM.

--jvm-options="-XX:StartFlightRecording=dumponexit=true,filename=<path-to-JFR-file>"

Konfigurowanie ścieżki dla wygenerowanych plików

Aby mieć pewność, że masz dostęp do plików, upewnij się, że ścieżka docelowa wygenerowanego pliku znajduje się w trwałym magazynie powiązanym z aplikacją. Na przykład możesz użyć kodu JSON podobnego do poniższego przykładu podczas tworzenia magazynu trwałego w usłudze Azure Spring Apps.

    {
       "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
              }
          }
       ]
    }

Alternatywnie możesz użyć następującego polecenia, aby dołączyć do magazynu trwałego.

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>

Następne kroki