Utilizza core dump per analizzare le cause di un'istanza di macchina virtuale (VM) che non risponde.
Per raccogliere core dump su Compute Engine, devi configurare le VM in modo che ricevano un segnale Non-Maskable Interrupt (NMI), quindi eseguire un comando SendDiagnosticInterrupt
per richiedere una schermata blu o di panico del kernel nel sistema operativo. Un kernel panic o una schermata blu avvia una raccolta
di core dump dal sistema operativo guest. Questi core dump possono essere quindi utilizzati per il debug, soprattutto in scenari difficili da riprodurre, come il blocco del kernel.
Prima di iniziare
- L'invio di indicatori NMI viene conteggiato nella quota predefinita dell'API Queries. Per ulteriori informazioni, consulta la sezione Limiti di frequenza API.
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud.
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.
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.
- Configura la tua VM per generare core dump
- Invia un segnale NMI per generare core dump
- Esamina i core dump
- Il registro imposta il valore
AlwaysKeepMemoryDump
su1
- Sul disco sono presenti più di 25 GB di spazio libero
VM_NAME
: ID istanza o nome della VM da cui vuoi raccogliere i core dumpZONE
: la zona in cui si trova la VMFacoltativo. Se non è già disponibile, crea una chiave API. Per saperne di più sulla creazione di chiavi API, consulta Creazione di una chiave API.
Per inviare il segnale NMI, effettua una richiesta
POST
al metodosendDiagnosticInterrupt
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY
Ad esempio, puoi utilizzare il comando
curl
per effettuare la richiesta nel seguente modo: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
Sostituisci quanto segue:
PROJECT_ID
: ID del progetto in cui creare la VMZONE
: la zona in cui si trova la VMVM_NAME
: ID istanza o nome della VM da cui vuoi raccogliere i core dumpAPI_KEY
: la tua chiave API
L'output è simile al seguente:
<Empty Response>
Per un elenco completo degli output, consulta la sezione successiva di questo documento relativa alle "risposte dei comandi NMI".
- Verifica che la VM sia configurata correttamente. Vedi Configura una VM.
- Attendi e riprova a eseguire la richiesta
SendDiagnosticInterrupt
.
REST
Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Per ulteriori informazioni, vedi Esegui l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.
Ruoli obbligatori
Per assicurarti che il tuo account utente o di servizio disponga dell'autorizzazione necessaria per inviare indicatori NMI a una VM, chiedi all'amministratore di concedere al tuo account utente o di servizio il ruolo IAM Amministratore istanze Compute (v1) (
roles/compute.instanceAdmin.v1
) sul tuo progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.Questo ruolo predefinito contiene l'autorizzazione
compute.instances.sendDiagnosticInterrupt
, necessaria per inviare indicatori NMI a una VM.L'amministratore potrebbe anche essere in grado di concedere questa autorizzazione al tuo account utente o di servizio con ruoli personalizzati o altri ruoli predefiniti.
Panoramica
Per utilizzare i core dump per eseguire il debug di una VM che non risponde o di un problema di sicurezza, devi completare i seguenti passaggi:
Limitazioni
Per le VM in cui è abilitato l'avvio protetto, devi disabilitare l'avvio protetto prima di inviare un indicatore di interruzione NMI. Per le istruzioni, consulta Modifica delle opzioni delle Shielded VM su un'istanza VM.
Configura VM
La risposta di una VM alla ricezione di un segnale di interruzione NMI dipende dalla configurazione del sistema operativo della VM.
Ogni sistema operativo scrive i log del core dump in una posizione diversa. Ad esempio, nei sistemi operativi Ubuntu il file di dump degli arresti anomali viene salvato in
/var/crash/
per impostazione predefinita.Per configurare il sistema operativo guest in modo da generare un arresto anomalo quando viene ricevuto un segnale NMI, consulta la documentazione del sistema operativo supportato.
Sistema operativo Link alle istruzioni Note aggiuntive Ubuntu Ubuntu: dump di arresto anomalo del kernel Per le VM Linux, devi configurare il kernel in modo che abbia un arresto anomalo quando riceve il segnale di interruzione NMI.
Per configurare l'arresto anomalo del kernel, aggiungi quanto segue al file di configurazione:
kernel.unknown_nmi_panic=1
SUSE Linux Enterprise Server (SLES) Configura la memoria crashkernel per l'analisi del core dump del kernel Red Hat Enterprise Linux (RHEL) Utilizza entrambi i seguenti documenti:
Container-Optimized OS (COS) Abilitazione del dump degli arresti anomali del kernel sulle istanze COS GCE Solo COS 93 e versioni successive supportano la generazione kdump con il segnale NMI. Windows Genera un kernel o completa il dump dell'arresto anomalo Le VM client Windows non conservano i file di dump della memoria, a meno che non siano membri di un dominio AD o non si verifichi quanto segue:
Per maggiori informazioni, consulta Comportamento di archiviazione e pulizia del dump del kernel in Windows 7
Invia NMI per generare core dump
Dopo aver configurato la VM, puoi inviare il segnale NMI alla VM utilizzando Google Cloud CLI o REST.
gcloud
Per inviare il segnale NMI, utilizza il comando
instances send-diagnostic-interrupt
.gcloud compute instances send-diagnostic-interrupt VM_NAME \ --zone=ZONE
Sostituisci quanto segue:
L'output è simile al seguente:
<Empty Response>
Per un elenco completo degli output, consulta la sezione successiva di questo documento sulle "Risposte dei comandi NMI".
REST
Risposte del comando NMI
Quando tenti di inviare un indicatore NMI, viene restituita una delle seguenti risposte.
Stato Body Note SUCCESS <Empty Response>
SUCCESS
mostra che il segnale NMI viene inviato al sistema operativo. Non garantisce che il core dump venga raccolto o che la VM venga arrestata o riavviata. Questi comportamenti sono determinati dalla configurazione del sistema operativo.NON SUPERATO UNSUPPORTED_OPERATION
Questo accade quando il sistema operativo non riceve il segnale NMI. I motivi sono diversi. Gli scenari comuni sono che la VM è in fase di migrazione in tempo reale o non è configurata correttamente per ricevere segnali NMI.
Per risolvere il problema, puoi provare quanto segue:NON SUPERATO Required 'compute.instances.sendDiagnosticInterrupt' permission for [..]
Il comando non è riuscito perché l'utente che ha effettuato la richiesta non dispone di autorizzazioni sufficienti.
Per risolvere il problema, puoi assegnare un ruolo all'utente che dispone dell'autorizzazionecompute.instances.sendDiagnosticInterrupt
.Esamina i core dump
Esamina il file di dump dell'arresto anomalo nella posizione configurata o predefinita per il tuo sistema operativo.
Ad esempio, nei sistemi operativi Ubuntu, per impostazione predefinita, il file di dump degli arresti anomali viene salvato in
/var/crash/
.Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2024-08-02 UTC.
[{ "type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id": "incorrectInformationOrSampleCode", "label":"Incorrect information or sample code" },{ "type": "thumb-down", "id": "missingTheInformationSamplesINeed", "label":"Missing the information/samples I need" },{ "type": "thumb-down", "id": "translationIssue", "label":"Problema di traduzione" },{ "type": "thumb-down", "id": "otherDown", "label":"Altra" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Facile da capire" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Il problema è stato risolto" },{ "type": "thumb-up", "id": "otherUp", "label":"Altra" }] -