Arquivo de despejo de memória corrompido quando você tenta obter um arquivo de despejo de memória completo de uma máquina virtual que está sendo executada em um ambiente de cluster
Este artigo fornece uma solução para um problema em que um arquivo de despejo de memória corrompido é gerado quando você tenta obter um arquivo de despejo de memória completo de uma máquina virtual.
Número original do KB: 2913486
Sintomas
Você tem uma máquina virtual em execução em um ambiente de cluster no Windows Server 2012 ou Windows Server 2008 R2. Quando você tenta obter um arquivo de despejo de memória completo da máquina virtual, um arquivo de despejo de memória corrompido é gerado. Enquanto o arquivo de despejo de memória está sendo carregado, você pode receber a seguinte mensagem:
ESTE ARQUIVO DE DESPEJO ESTÁ PARCIALMENTE CORROMPIDO.
KdDebuggerDataBlock não está presente ou ilegível.
Falha de GetContextState, 0xD0000147
Não é possível obter o contador de programas
Falha de GetContextState, 0xD0000147
Não é possível obter o contexto atual da máquina, NTSTATUS 0xC0000147
Além disso, você pode observar que a gravação de um arquivo de despejo de memória completo não é concluída e que a máquina virtual é reiniciada em outro nó no cluster.
Motivo
Esse problema ocorre porque a opção Habilitar monitoramento de pulsação para a máquina virtual está selecionada para a máquina virtual. Essa opção redefine a máquina virtual clusterizada após um minuto (o valor padrão) e a máquina virtual clusterizada requer mais de um minuto para concluir a gravação do despejo de memória.
Observação
As pulsações entre a máquina virtual e o Virtual Machine Manager ocorrem a cada poucos segundos. Pode levar até um minuto para detectar que a máquina virtual está inativa porque o recurso de máquina virtual verifica o status de pulsação do Virtual Machine Manager em sua função de ponto de entrada isAlive. Por padrão, isAlive ocorre uma vez a cada minuto. No entanto, os batimentos cardíacos podem parar 30 segundos antes do intervalo de um minuto. Nesse caso, o cluster pode reiniciar a máquina virtual no mesmo servidor ou fazer failover para outro nó.
Resolução
Para resolver esse problema, desative a opção Habilitar monitoramento de pulsação para a máquina virtual.
Opção 1: alterar as configurações da GUI
- Abra o Gerenciador de Cluster de Failover.
- Clique em Funções e localize o recurso de máquina virtual.
- Na guia Recursos, clique com o botão direito do mouse na máquina virtual.
- Clique em Propriedades e, em seguida, clique na guia Configurações .
- Em Configuração de Pulsação, clique para desmarcar a caixa de seleção Habilitar recuperação automática para monitoramento de integridade do aplicativo.
- Clique para desmarcar a caixa de seleção Habilitar monitoramento de pulsação para a máquina virtual e clique em OK.
Opção 2: Alterar as configurações usando o Windows PowerShell
Inicie o Windows PowerShell.
Verifique o nome da máquina virtual. Para fazer isso, digite o seguinte comando do Windows PowerShell:
PS C:\> Get-ClusterResource
Verifique se as opções Habilitar monitoramento de pulsação para a máquina virtual e Habilitar recuperação automática para monitoramento de integridade do aplicativo estão selecionadas. Para fazer isso, digite o seguinte comando do Windows PowerShell:
PS C:\> Get-ClusterResource <VirtualMachineName> | Get-ClusterParameter CheckHeartbeat
Quando o valor CheckHeartbeat é 1, ambas as opções são selecionadas. Para cancelar ambas as opções, altere esse valor para 0. Para fazer isso, digite o seguinte comando do Windows PowerShell:
PS C:\> Get-ClusterResource <VirtualMachineName> | Set-ClusterParameter CheckHeartbeat 0
Se você quiser cancelar apenas a opção Habilitar recuperação automática para monitoramento de integridade do aplicativo, execute o seguinte comando do Windows PowerShell:
PS C:\> (Get-ClusterResource <Object>).EmbeddedFailureAction = 1
Mais informações
Os arquivos de despejo de memória mini e kernel são gravados com êxito. Isso ocorre porque o tempo necessário para gravar esses arquivos não excede o limite de um minuto.