Verwenden der Diagnoseeinstellungen von JVM-Optionen für die erweiterte Problembehandlung in Azure Spring Apps

Hinweis

Azure Spring Apps ist der neue Name für den Azure Spring Cloud-Dienst. Obwohl der Dienst umbenannt wurde, wird der alte Name noch an einigen Stellen verwendet, solange wir Ressourcen wie Screenshots, Videos und Diagramme aktualisieren.

Dieser Artikel gilt für: ✔️ Java ❌ C#

Dieser Artikel gilt für: ✔️ Basic/Standard ✔️ Enterprise

In diesem Artikel wird beschrieben, wie Sie Diagnoseeinstellungen über JVM-Optionen verwenden, um eine erweiterte Problembehandlung in Azure Spring Apps durchzuführen.

Es gibt mehrere JVM-basierte Anwendungsstartparameter im Zusammenhang mit Heapdump-, Java Flight Recorder- (JFR) und Garbage Collection-Protokollen (GC). In Azure Spring Apps wird die Konfiguration von JVM mithilfe von JVM-Optionen unterstützt.

Weitere Informationen zum Konfigurieren von JVM-basierten Anwendungsstartparametern finden Sie unter az spring app deployment in der Azure CLI-Referenzdokumentation. Die folgenden Abschnitte enthalten mehrere Beispiele für nützliche Werte für den --jvm-options-Parameter.

Voraussetzungen

  • Eine bereitgestellte Azure Spring Apps-Dienstinstanz. Informationen zu den ersten Schritten finden Sie unter Schnellstart: Starten einer Java Spring-Anwendung mit der Azure CLI.
  • Mindestens eine bereits in Ihrer Dienstinstanz erstellte Anwendung.
  • Ihr eigener persistenter Speicher (wie unter Aktivieren des eigenen persistenten Speichers in Azure Spring Apps beschrieben). Dieser Speicher wird verwendet, um generierte Diagnosedateien zu speichern. Die Pfade, die Sie in den unten angegebenen Parameterwerten angeben, sollten sich unter dem Bereitstellungspfad des persistenten Speichers befinden, der an Ihre App gebunden ist. Wenn Sie einen Pfad unter dem Bereitstellungspfad verwenden möchten, müssen Sie den Unterpfad im Voraus erstellen.

Generieren eines Heapdumps, wenn nicht genügend Arbeitsspeicher vorhanden ist

Verwenden Sie den folgenden --jvm-options-Parameter, um ein Heapdump zu generieren, wenn ein Fehler aufgrund von nicht genügend Arbeitsspeicher auftritt.

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

Als Alternative zur Angabe des Pfads zum Heapdumpordner können Sie einen bestimmten Dateinamen angeben. Es wird jedoch dringend empfohlen, stattdessen einen Ordnerpfad anzugeben. Wenn Sie einen Dateinamen angeben, generiert der Befehl aufgrund der Einschränkungen des HPROF-Dateiformats nur ein Heapdump für den ersten Fehler aufgrund von nicht genügend Arbeitsspeicher. Wenn Sie einen Ordnerpfad angeben, erhalten Sie ein Heapdump in einer Datei mit einem automatisch generierten Namen für jeden Fehler aufgrund von nicht genügend Arbeitsspeicher.

Generieren von GC-Protokollen

Verwenden Sie den folgenden --jvm-options-Parameter, um GC-Protokolle zu generieren. Weitere Informationen finden Sie in der offiziellen JVM-Dokumentation.

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

Generieren einer JFR-Datei beim Beenden

Verwenden Sie den folgenden --jvm-options-Parameter, um eine JFR-Datei zu generieren. Weitere Informationen finden Sie in der offiziellen JVM-Dokumentation.

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

Konfigurieren des Pfads für generierte Dateien

Damit Sie auf Ihre Dateien zugreifen können, stellen Sie sicher, dass sich der Zielpfad Ihrer generierten Datei im persistenten Speicher befindet, der an Ihre App gebunden ist. Beispielsweise können Sie JSON ähnlich wie im folgenden Beispiel verwenden, wenn Sie Ihren persistenten Speicher in Azure Spring Apps erstellen.

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

Alternativ können Sie den folgenden Befehl verwenden, um an beständigen Speicher anzufügen.

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>

Nächste Schritte