Verwenden Sie Core Dumps, um die Ursachen einer nicht reagierenden VM-Instanz zu analysieren.
Zum Erfassen von Core Dumps in Compute Engine müssen Sie Ihre VMs so konfigurieren, dass sie ein Non-Maskable Interrupt (NMI)-Signal erhalten, und dann einen SendDiagnosticInterrupt
-Befehl ausführen, um eine Kernel Panic oder einen Bluescreen in Ihrem Betriebssystem auszulösen. Eine Kernel Panic oder ein Bluescreen startet eine Core-Dump-Erfassung durch das Gastbetriebssystem. Diese Core Dumps können dann zu Debugging-Zwecken verwendet werden, insbesondere bei Szenarien, die schwer zu reproduzieren sind, z. B. bei einem Kernel Freeze.
Hinweise
- Das Senden von NMI-Signalen wird im standardmäßigen Queries API-Kontingent gezählt. Weitere Informationen finden Sie unter API-Ratenlimits.
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft.
Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren.
Select the tab for how you plan to use the samples on this page:
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- VM so konfigurieren, dass Core Dumps generiert werden
- NMI-Signal senden, um Core Dumps zu generieren
- Core Dumps prüfen
- Die Registry setzt
AlwaysKeepMemoryDump
auf1
. - Der Speicher hat mehr als 25 GB freien Speicherplatz.
VM_NAME
: Instanz-ID oder Name der VM, von der Sie Core Dumps erfassen möchtenZONE
: Zone, in der sich Ihre VM befindetOptional. Erstellen Sie einen API-Schlüssel, falls noch keiner verfügbar ist. Weitere Informationen zum Erstellen von API-Schlüsseln finden Sie unter API-Schlüssel erstellen.
Stellen Sie zum Senden des NMI-Signals eine
POST
-Anfrage an die MethodesendDiagnosticInterrupt
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY
Verwenden Sie beispielsweise den Befehl
curl
so, um die Anfrage zu stellen:curl --request POST 'https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY' \ --header 'Authorization: Bearer $(gcloud auth print-access-token)' \ --header 'Accept: application/json' \ --compressed
Dabei gilt:
PROJECT_ID
ist die ID des Projekts, in dem die VM erstellt werden soll.ZONE
: Zone, in der sich Ihre VM befindetVM_NAME
: Instanz-ID oder Name der VM, von der Sie Core Dumps erfassen möchtenAPI_KEY
: Ihr API-Schlüssel
Die Ausgabe sieht etwa so aus:
<Empty Response>
Eine vollständige Liste der Ausgaben finden Sie im nächsten Abschnitt in diesem Dokument zu "NMI-Befehlsantworten".
- Prüfen Sie, ob die VM ordnungsgemäß konfiguriert ist. Siehe VM konfigurieren.
- Warten Sie und wiederholen Sie die
SendDiagnosticInterrupt
-Anfrage.
REST
Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.
Erforderliche Rollen
Bitten Sie Ihren Administrator oder Ihr Dienstkonto, Ihrem Nutzer oder Dienstkonto für Ihr Projekt die IAM-Rolle Compute Instance Admin (Version 1) zu erteilen (
roles/compute.instanceAdmin.v1
), um sicherzustellen, dass Ihr Nutzer oder Dienstkonto über die erforderliche Berechtigung zum Senden von NMI-Signalen an eine VM verfügt. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.Diese vordefinierte Rolle enthält die Berechtigung
compute.instances.sendDiagnosticInterrupt
, die zum Senden von NMI-Signalen an eine VM erforderlich ist.Ihr Administrator kann Ihrem Nutzer oder Dienstkonto möglicherweise auch diese Berechtigung mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erteilen.
Überblick
Führen Sie die folgenden Schritte aus, um Core Dumps zur Fehlerbehebung bei einer nicht reagierenden VM oder einem Sicherheitsproblem zu verwenden:
Beschränkungen
Bei VMs, für die Secure Boot aktiviert ist, müssen Sie Secure Boot deaktivieren, bevor Sie ein NMI-Signal senden. Eine Anleitung finden Sie unter Shielded VM-Optionen auf einer VM-Instanz ändern.
VM konfigurieren
Die Reaktion einer VM auf den Empfang eines NMI-Signals hängt von der Betriebssystemkonfiguration der VM ab.
Die wichtigsten Core-Dump-Logs werden von jedem Betriebssystem an einem anderen Speicherort geschrieben. Unter Ubuntu-Betriebssystemen wird die Crash-Dumpdatei beispielsweise standardmäßig unter
/var/crash/
gespeichert.Informationen zum Konfigurieren des Gastbetriebssystems zum Generieren eines Crash-Dump beim Empfangen eines NMI-Signals finden Sie in der Dokumentation für das unterstützte Betriebssystem.
Betriebssystem Links zur Anleitung Zusätzliche Hinweise Ubuntu Ubuntu: Kernel-Crash-Dump Bei Linux-VMs müssen Sie den Kernel so konfigurieren, dass er abstürzt, wenn er das NMI-Signal empfängt.
Fügen Sie Ihrer Konfigurationsdatei Folgendes hinzu, um den Kernel für einen Absturz zu konfigurieren:
kernel.unknown_nmi_panic=1
SUSE Linux Enterprise Server (SLES) crashkernel-Speicher für die Kernel-Dump-Analyse konfigurieren Red Hat Enterprise Linux (RHEL) Verwenden Sie die beiden folgenden Dokumente:
Container-Optimized OS (COS) Kernel-Crash-Dump auf GCE-COS-Instanzen aktivieren Nur COS 93 und höher unterstützen die kdump-Generierung mit NMI-Signal. Windows Kernel- oder vollständigen Crash-Dump generieren Windows-Client-VMs speichern keine Arbeitsspeicher-Dumpdateien, es sei denn, sie sind Mitglieder einer AD-Domain oder Folgendes ist wahr:
Weitere Informationen finden Sie unter Kernel-Dump-Speicher und Bereinigungsverhalten in Windows 7.
NMI zum Generieren von Core Dumps senden
Nachdem Sie die VM konfiguriert haben, können Sie das NMI-Signal mithilfe der Google Cloud CLI oder REST an die VM senden.
gcloud
Verwenden Sie zum Senden des NMI-Signals den Befehl
instances send-diagnostic-interrupt
.gcloud compute instances send-diagnostic-interrupt VM_NAME \ --zone=ZONE
Dabei gilt:
Die Ausgabe sieht etwa so aus:
<Empty Response>
Eine vollständige Liste der Ausgaben finden Sie im nächsten Abschnitt in diesem Dokument zu "NMI-Befehlsantworten".
REST
NMI-Befehlsantworten
Eine der folgenden Antworten wird zurückgegeben, wenn Sie versuchen, ein NMI-Signal zu senden.
Status Text Hinweise ERFOLGREICH <Empty Response>
SUCCESS
zeigt an, dass das NMI-Signal an das Betriebssystem gesendet wird. Es wird nicht garantiert, dass der Core Dump erfasst wird oder dass die VM heruntergefahren oder neu gestartet wird. Diese Verhaltensweisen werden durch die Betriebssystemkonfiguration bestimmt.FEHLER UNSUPPORTED_OPERATION
Dies tritt auf, wenn das Betriebssystem das NMI-Signal nicht empfängt. Dafür gibt es mehrere Gründe. Häufig wird die VM live migriert oder die VM ist nicht richtig für den Empfang von NMI-Signalen konfiguriert.
Das Problem können Sie so beheben:FEHLER Required 'compute.instances.sendDiagnosticInterrupt' permission for [..]
Der Befehl ist fehlgeschlagen, weil der Nutzer, der die Anfrage stellt, nicht über ausreichende Berechtigungen verfügt.
Um dieses Problem zu beheben, können Sie dem Nutzer eine Rolle mit der Berechtigungcompute.instances.sendDiagnosticInterrupt
zuweisen.Core Dumps prüfen
Prüfen Sie die Crash-Dumpdatei am konfigurierten oder Standardspeicherort für Ihr Betriebssystem.
Beispielsweise wird unter Ubuntu-Betriebssystemen die Crash-Dumpdatei standardmäßig unter
/var/crash/
gespeichert.Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2024-12-03 (UTC).
-