Em artigo
recente, abordei um tema um tanto quanto obscuro para muitos administradores de
sistemas: O uso do arquivo de paginação. Aos que não leram, recomendo que o faça aqui.
Nele, mencionei sobre a necessidade do uso de arquivos de paginação para a
geração dos despejos de memória, importante mecanismo para resolução de
problemas em sistemas operacionais Microsoft.
Nesse artigo
discorrerei especificamente sobre os despejos de memória. Tratarei sobre as
diversos tipos de dump files, o conteúdo dos
arquivos, o comportamento relacionado ao acumulo / substituição dos arquivos e
requisitos relacionados aos arquivos de paginação.
Com isso,
espero esclarecer um outro tema obscuro e consequentemente contribuir para o
enriquecimento técnico da comunidade de TI.
Vamos lá
...
Quando ocorre uma falha do sistema
operacional, (também conhecida como "erro de parada”), o arquivo de
despejo gerado a partir dessa ocorrência é chamado de despejo de memória ou
dump memory.
Trata-se de um arquivo denominado "memory.dmp", gravado por padrão em “%SystemRoot%” e responsável por armazenar informações relacionadas aos eventos que antecederam a falha, permitindo aos administradores maior assertividade na análise da causa raiz do problema.
Conforme mencionei no artigo
relacionado a “Arquivos de paginação” o arquivo de paginação deve ser grande o
suficiente para manter o tipo de despejo de memória selecionado. Caso
contrário, o sistema não criará o arquivo de despejo de memória.
Para
atender cenários distintos, a Microsoft nos fornece a possibilidade de
trabalhar com os seguintes tipos de arquivos de despejo: Despejo de memória
pequeno, despejo de memória do kernel, despejo de memória completo, despejo de
memória automático e despejo de memória ativo.
Small Memory Dump (Despejo de memória pequeno)
Possui exatamente 64 KB e requer
um arquivo de paginação de apenas 64 KB na unidade de inicialização do sistema
operacional.
É recomendado em situações onde o espaço em disco é extremamente limitado.
Em função da limitação de tamanho, os erros que não foram causados diretamente pelo thread que executa no momento da falha podem não ser descobertos através da análise desse arquivo.
De acordo com a Microsoft, este arquivo inclui os seguintes elementos:
- A mensagem de verificação de erros e os parâmetros, bem como demais dados relacionados a "tela azul" (BSOD);
- O contexto do processador (PRCB) para o processador que caiu;
- As informações de processo e o contexto do kernel (EPROCESS) relacionado ao processo que caiu;
- A informação de thread e o contexto do kernel (ETHREAD) relacionado ao segmento que caiu;
- A pilha de chamadas em modo kernel para o segmento que caiu. Se esta for maior que 16 KB, somente os primeiros 16 KB serão incluídos;
- Lista de drivers carregados.
No Windows XP e versões posteriores do Windows, os seguintes itens foram incluídos:
- Lista de módulos carregados e descarregados;
- O bloco de dados do depurador, que contém informações básicas de depuração do sistema;
- Todas as páginas de memória adicionais que o Windows identifica como úteis nas falhas de depuração. Isso inclui as páginas de dados que os registros apontaram quando ocorreu o incidente e outras páginas especificamente solicitadas pelo componente de falha.
Uma particularidade relacionada a essa categoria de dump é que se houver um novo despejo de memória, o arquivo anterior será mantido. Cada novo arquivo receberá um nome distinto, que conterá a data da falha. Por exemplo, “mini022718-01.dmp” é o primeiro arquivo de despejo de memória gerado em 27 de fevereiro de 2018. Uma lista de todos os arquivos Small Dump da memória é mantida em “%SystemRoot%\Minidump”.
É recomendado em situações onde o espaço em disco é extremamente limitado.
Em função da limitação de tamanho, os erros que não foram causados diretamente pelo thread que executa no momento da falha podem não ser descobertos através da análise desse arquivo.
De acordo com a Microsoft, este arquivo inclui os seguintes elementos:
- A mensagem de verificação de erros e os parâmetros, bem como demais dados relacionados a "tela azul" (BSOD);
- O contexto do processador (PRCB) para o processador que caiu;
- As informações de processo e o contexto do kernel (EPROCESS) relacionado ao processo que caiu;
- A informação de thread e o contexto do kernel (ETHREAD) relacionado ao segmento que caiu;
- A pilha de chamadas em modo kernel para o segmento que caiu. Se esta for maior que 16 KB, somente os primeiros 16 KB serão incluídos;
- Lista de drivers carregados.
No Windows XP e versões posteriores do Windows, os seguintes itens foram incluídos:
- Lista de módulos carregados e descarregados;
- O bloco de dados do depurador, que contém informações básicas de depuração do sistema;
- Todas as páginas de memória adicionais que o Windows identifica como úteis nas falhas de depuração. Isso inclui as páginas de dados que os registros apontaram quando ocorreu o incidente e outras páginas especificamente solicitadas pelo componente de falha.
Uma particularidade relacionada a essa categoria de dump é que se houver um novo despejo de memória, o arquivo anterior será mantido. Cada novo arquivo receberá um nome distinto, que conterá a data da falha. Por exemplo, “mini022718-01.dmp” é o primeiro arquivo de despejo de memória gerado em 27 de fevereiro de 2018. Uma lista de todos os arquivos Small Dump da memória é mantida em “%SystemRoot%\Minidump”.
Kernel Memory Dump (Despejo de memória do Kernel)
Esse dump contém toda a
memória em uso pelo kernel no momento da falha.
Normalmente o arquivo de despejo possuirá algo em torno de um terço do tamanho da memória física do sistema, porém essa quantidade variará em função das suas circunstâncias.
Este arquivo de despejo ignora a memória não alocada ou qualquer memória alocada para aplicativos em modo usuário. Ele só inclui memória alocada para o kernel do Windows e o nível de abstração de hardware (HAL), bem como a memória alocada aos drivers do modo kernel e outros programas em modo kernel.
Na maioria das vezes, este despejo é o mais apropriado por omitir apenas as porções de memória que provavelmente não estarão envolvidas na falha.
Por padrão, o arquivo dump da memória do Kernel é gravado em “%SystemRoot%\Memory.dmp”.
Em caso de um novo erro que gere um novo despejo de memória, o arquivo anterior será substituído.
Normalmente o arquivo de despejo possuirá algo em torno de um terço do tamanho da memória física do sistema, porém essa quantidade variará em função das suas circunstâncias.
Este arquivo de despejo ignora a memória não alocada ou qualquer memória alocada para aplicativos em modo usuário. Ele só inclui memória alocada para o kernel do Windows e o nível de abstração de hardware (HAL), bem como a memória alocada aos drivers do modo kernel e outros programas em modo kernel.
Na maioria das vezes, este despejo é o mais apropriado por omitir apenas as porções de memória que provavelmente não estarão envolvidas na falha.
Por padrão, o arquivo dump da memória do Kernel é gravado em “%SystemRoot%\Memory.dmp”.
Em caso de um novo erro que gere um novo despejo de memória, o arquivo anterior será substituído.
Complete Memory Dump (Despejo de memória completo)
Trata-se do maior arquivo
de despejo do modo kernel, pois inclui toda a memória física utilizada pelo
Windows. Só não inclui, por padrão, a memória física usada pelo firmware da
plataforma.
Este arquivo de despejo exige na unidade de inicialização um arquivo de paginação cujo tamanho seja igual a sua memória RAM + 1 MB.
Por padrão, o arquivo dump da memória do Kernel é gravado em “%SystemRoot%\Memory.dmp”.
Em caso de um novo erro que gere um novo despejo de memória, o arquivo anterior será substituído.
Este arquivo de despejo exige na unidade de inicialização um arquivo de paginação cujo tamanho seja igual a sua memória RAM + 1 MB.
Por padrão, o arquivo dump da memória do Kernel é gravado em “%SystemRoot%\Memory.dmp”.
Em caso de um novo erro que gere um novo despejo de memória, o arquivo anterior será substituído.
Automatic Memory Dump (Despejo de memória
automático)
Disponível a partir do
Windows 8 e Windows 2012, o dump de memória automático é habilitado por padrão
e contém a mesma informação contida no dump da Memória do Kernel. Trata-se
somente de uma nova configuração e não de uma nova categoria de despejo de
memória.
A diferença entre os dois refere-se somente a maneira que o Windows define o tamanho do arquivo de paginação do sistema.
Se o arquivo de paginação estiver configurado para ser gerenciado automaticamente pelo sistema, e o despejo de memória estiver configurado como “Dump de memória automático”, o Windows poderá utilizar para o arquivo de paginação o equivalente ao tamanho da memória RAM ou 32 GB, optando pelo que for menor.
Dessa forma, o Windows define o tamanho do arquivo de paginação como o suficiente para garantir que um despejo de memória do kernel seja capturado.
Se em caso de falha o arquivo de paginação não for grande o suficiente para armazenar um despejo de memória do kernel, o Windows aumentará o tamanho do arquivo de paginação para o tamanho da RAM ou 32 GB (o que for menor) e registrará este evento no Registro, especificamente em “HKLM\SYSTEM\CurrentControlSet\Control\ CrashControl\LastCrashTime”.
Após aumentado, o arquivo de paginação permanecerá no local por 4 semanas e após esse período retornará ao tamanho menor. Se houver a necessidade de reduzir o arquivo de paginação antes de 4 semanas, bastará excluir a referida entrada de registro.
Por padrão, o arquivo de dump da memória do Kernel é gravado em “%SystemRoot%\Memory.dmp”.
A diferença entre os dois refere-se somente a maneira que o Windows define o tamanho do arquivo de paginação do sistema.
Se o arquivo de paginação estiver configurado para ser gerenciado automaticamente pelo sistema, e o despejo de memória estiver configurado como “Dump de memória automático”, o Windows poderá utilizar para o arquivo de paginação o equivalente ao tamanho da memória RAM ou 32 GB, optando pelo que for menor.
Dessa forma, o Windows define o tamanho do arquivo de paginação como o suficiente para garantir que um despejo de memória do kernel seja capturado.
Se em caso de falha o arquivo de paginação não for grande o suficiente para armazenar um despejo de memória do kernel, o Windows aumentará o tamanho do arquivo de paginação para o tamanho da RAM ou 32 GB (o que for menor) e registrará este evento no Registro, especificamente em “HKLM\SYSTEM\CurrentControlSet\Control\ CrashControl\LastCrashTime”.
Após aumentado, o arquivo de paginação permanecerá no local por 4 semanas e após esse período retornará ao tamanho menor. Se houver a necessidade de reduzir o arquivo de paginação antes de 4 semanas, bastará excluir a referida entrada de registro.
Por padrão, o arquivo de dump da memória do Kernel é gravado em “%SystemRoot%\Memory.dmp”.
Active Memory Dump (Despejo de memória ativo)
Disponível a partir do
Windows 10, o dump de memória ativo assemelha-se a um despejo de memória
completo, porém filtra páginas que provavelmente serão inúteis na resolução do
problema. Por isso, geralmente é significativamente menor se comparado ao despejo
de memória completo.
Inclui toda a memória alocada para aplicativos em modo usuário, a memória alocada ao kernel do Windows e ao nível de abstração de hardware (HAL), bem como à memória alocada aos drivers no modo kernel e outros programas no modo kernel.
O despejo inclui páginas ativas mapeadas no kernel ou espaço de usuário que são úteis para depuração. Não inclui o cache de arquivos e outros tipos de memória que provavelmente serão inúteis à depuração.
Essa categoria de dump é útil quando o Windows hospeda máquinas virtuais, pois o conteúdo relevante de cada máquina virtual estará incluso nesse arquivo. Havendo múltiplas máquinas virtuais em execução, haverá uma grande quantidade de memória em uso no sistema host.
Muitas vezes, as atividades de código de interesse estão no sistema operacional host e não nas máquinas virtuais (guest). Um despejo de memória ativo filtra a memória associada a todas as máquinas virtuais filho.
Por padrão, o arquivo dump da memória do Kernel é gravado em "%SystemRoot%\Memory.dmp".
Inclui toda a memória alocada para aplicativos em modo usuário, a memória alocada ao kernel do Windows e ao nível de abstração de hardware (HAL), bem como à memória alocada aos drivers no modo kernel e outros programas no modo kernel.
O despejo inclui páginas ativas mapeadas no kernel ou espaço de usuário que são úteis para depuração. Não inclui o cache de arquivos e outros tipos de memória que provavelmente serão inúteis à depuração.
Essa categoria de dump é útil quando o Windows hospeda máquinas virtuais, pois o conteúdo relevante de cada máquina virtual estará incluso nesse arquivo. Havendo múltiplas máquinas virtuais em execução, haverá uma grande quantidade de memória em uso no sistema host.
Muitas vezes, as atividades de código de interesse estão no sistema operacional host e não nas máquinas virtuais (guest). Um despejo de memória ativo filtra a memória associada a todas as máquinas virtuais filho.
Por padrão, o arquivo dump da memória do Kernel é gravado em "%SystemRoot%\Memory.dmp".
Análise dos arquivos de despejo
Entre outros itens, a
análise dos arquivos de dump é fundamental para determinar a causa de uma falha
no sistema operacional.
Para abertura e análise de tais arquivos, podemos utilizar as ferramentas KD, DumpChk ou WinDBG que são ferramentas de depuração fornecidas pela Microsoft e disponível para download aqui.
Para abertura e análise de tais arquivos, podemos utilizar as ferramentas KD, DumpChk ou WinDBG que são ferramentas de depuração fornecidas pela Microsoft e disponível para download aqui.
Abraço e até a próxima!!!