Use despejos de memória para analisar as causas de uma instância de máquina virtual (VM) que não responde.
Para recolher despejos de memória principais no Compute Engine, tem de configurar as suas VMs para receberem um sinal de interrupção não ocultável (NMI) e, em seguida, executar um comando SendDiagnosticInterrupt
para acionar um pânico do kernel ou um ecrã azul no seu sistema operativo. Um kernel panic ou um ecrã azul inicia uma recolha de core dumps
pelo sistema operativo convidado. Estes despejos de memória podem ser usados para fins de depuração, especialmente em cenários difíceis de reproduzir, como um bloqueio do kernel.
Antes de começar
- O envio de sinais NMI é contabilizado na quota da API Consultas predefinida. Para mais informações, consulte os limites de taxa da API.
-
Se ainda não o tiver feito, configure a autenticação.
A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:
Select the tab for how you plan to use the samples on this page:
gcloud
-
Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:
gcloud init
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.
- Set a default region and zone.
REST
Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.
Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:
gcloud init
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.
Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação.
Funções necessárias
Para garantir que a sua conta de utilizador ou de serviço tem a autorização necessária para enviar sinais de NMI para uma VM, peça ao seu administrador para conceder à sua conta de utilizador ou de serviço a função de Administrador de instâncias do Compute (v1) (
roles/compute.instanceAdmin.v1
) do IAM no seu projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.Esta função predefinida contém a autorização
compute.instances.sendDiagnosticInterrupt
, que é necessária para enviar sinais NMI para uma VM.O administrador também pode conceder esta autorização à sua conta de utilizador ou de serviço com funções personalizadas ou outras funções predefinidas.
Vista geral
Para usar descargas de memória para ajudar a depurar uma VM que não responde ou um problema de segurança, tem de concluir os seguintes passos:
- Configure a sua VM para gerar despejos de memória
- Envie um sinal NMI para gerar despejos de memória
- Reveja os despejos de memória
Limitações
Para VMs com o arranque seguro ativado, tem de desativar o arranque seguro antes de enviar um sinal de interrupção NMI. Para ver instruções, consulte o artigo Modificar opções de VMs protegidas numa instância de VM.
Configurar VM
A resposta de uma MV à receção de um sinal de interrupção NMI depende da configuração do sistema operativo da MV.
Cada sistema operativo escreve os respetivos registos de despejo de memória numa localização diferente. Por exemplo, nos sistemas operativos Ubuntu, o ficheiro de despejo de falhas é guardado em
/var/crash/
por predefinição.Para configurar o SO convidado de modo a gerar um despejo de falhas quando é recebido um sinal NMI, reveja a documentação do sistema operativo suportado.
Sistema operativo Links para instruções Notas adicionais Ubuntu Ubuntu: Kernel crash dump Para VMs Linux, tem de configurar o kernel para falhar quando recebe o sinal de interrupção NMI.
Para configurar o kernel para falhar, adicione o seguinte ao ficheiro de configuração:
kernel.unknown_nmi_panic=1
SUSE Linux Enterprise Server (SLES) Configure a memória do crashkernel para a análise de despejos de memória do núcleo Red Hat Enterprise Linux (RHEL) Use ambos os seguintes documentos:
SO otimizado para contentores (COS) Ativar o despejo de falhas do kernel em instâncias do COS do GCE Apenas o COS 93 e posterior suportam a geração de kdump através do sinal NMI. Windows Gere um kernel ou um despejo de memória completo em caso de falha do sistema As VMs de cliente Windows não mantêm ficheiros de despejo de memória, a menos que sejam membros de um domínio do AD ou que se verifique o seguinte:
- O registo define
AlwaysKeepMemoryDump
como1
- O disco tem mais de 25 GB de espaço livre
Para mais informações, consulte o artigo Armazenamento de despejos do kernel e comportamento de limpeza no Windows 7
Envie NMI para gerar despejos de memória
Depois de configurar a VM, pode enviar o sinal NMI para a VM através da CLI do Google Cloud ou do REST.
gcloud
Para enviar o sinal NMI, use o comando
instances send-diagnostic-interrupt
.gcloud compute instances send-diagnostic-interrupt VM_NAME \ --zone=ZONE
Substitua o seguinte:
VM_NAME
: ID ou nome da instância da VM da qual quer recolher despejos de memóriaZONE
: a zona onde a sua VM está localizada
O resultado é semelhante ao seguinte:
<Empty Response>
Para ver uma lista completa das saídas, consulte a secção seguinte neste documento sobre "Respostas de comandos NMI".
REST
Opcional. Se ainda não estiver disponível, crie uma chave da API. Para mais informações sobre a criação de chaves da API, consulte o artigo Criar uma chave da API.
Para enviar o sinal NMI, faça um pedido
POST
ao métodosendDiagnosticInterrupt
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY
Por exemplo, pode usar o comando
curl
para fazer o pedido da seguinte forma: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
Substitua o seguinte:
PROJECT_ID
: ID do projeto no qual criar a VMZONE
: a zona onde a sua VM está localizadaVM_NAME
: ID ou nome da instância da VM da qual quer recolher despejos de memóriaAPI_KEY
: a sua chave da API
O resultado é semelhante ao seguinte:
<Empty Response>
Para ver uma lista completa das saídas, consulte a secção seguinte neste documento acerca das "Respostas aos comandos NMI".
Respostas de comandos NMI
Quando tenta enviar um sinal de NMI, é devolvida uma das seguintes respostas.
Estado Corpo Notas ÊXITO <Empty Response>
SUCCESS
mostra que o sinal NMI é enviado para o sistema operativo. Não garante que o despejo de memória seja recolhido nem que a VM seja encerrada ou reiniciada. Estes comportamentos são determinados pela configuração do sistema operativo.FAIL UNSUPPORTED_OPERATION
Isto ocorre quando o sistema operativo não recebe o sinal NMI. Existem vários motivos para tal. Os cenários comuns são a migração em direto da VM ou a VM não estar configurada corretamente para receber sinais de NMI.
Para resolver este problema, pode experimentar o seguinte:- Confirme se a VM está configurada corretamente. Consulte Configurar VM.
- Aguarde e repita o pedido
SendDiagnosticInterrupt
.
FAIL Required 'compute.instances.sendDiagnosticInterrupt' permission for [..]
O comando falhou porque o utilizador que está a fazer o pedido não tem autorizações suficientes.
Para resolver este problema, pode atribuir uma função ao utilizador que contenha a autorizaçãocompute.instances.sendDiagnosticInterrupt
.Reveja os despejos de memória
Reveja o ficheiro de despejo de falhas na localização configurada ou predefinida para o seu sistema operativo.
Por exemplo, nos sistemas operativos Ubuntu, por predefinição, o ficheiro de despejo de falhas é guardado em
/var/crash/
.Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-09-25 UTC.
-