“Travamento de Servidores” - Como fazer troubleshooting
Por: Marcelo Fontes
1. Introdução
Deparamos frequentemente com situações em que o servidor realmente para de responder, em outras palavras, trava. Abordaremos neste artigo estratégias de troubleshooting para problemas desta natureza.
2. Cenário
Verificar:
É possível fazer logon na console?
Se já existe uma seção logada no servidor, consegue-se operar o servidor pela console? Há resposta do windows explorer, notepad ou outras aplicações nativas do Windows?
Via rede, consegue-se fazer acesso ao C$ do servidor?
A máquina responde a ping?
Caso as respostas acima sejam negativas, o servidor está realmente travado. Se algumas respostas acima forem positivas, alguns componentes trabalham, no entanto outros componentes básicos para funcionamento do servidor necessitam ser revistos.
Neste artigo vamos partir do princípio que todas as respostas acima sejam negativas. Temos um servidor travado. Como prosseguir com troubleshooting?
Bem, a melhor forma de se identificar a real causa pela qual um servidor encontra-se travado é via a geração de um dump de memória do sistema. Este dump irá conter toda a porção da memória do sistema no momento em que o travamento se deu. Uma vez que não existe nenhuma resposta via console, a única forma de se gerar o dump é através da combinação de teclas conforme documento abaixo:
https://support.microsoft.com/default.aspx?scid=kb;EN-US;244139
O especialista em debugging que irá fazer análise do seu dump, irá buscar as threads que estejam em estado de espera, dentre estas, as que estejam aguardando por recursos de sincronização a serem liberados chamados em inglês de locks. Determinadas threads do sistema adquirem estes locks para perfazerem operações exclusivas como exemplo escrever dados e gravar em disco. Nenhuma outra thread pode escrever na mesma porção de dados. Acontece que operações de I/O que irá fazer esta mesma escrita podem ser interrompidas por motivo de algum driver não ter completado a sua parte funcional desta operação. Outras threads ficarão aguardando indefinidamente por este I/O e o sistema como um todo não mais responde. Outras variâncias de travamento de threads como “deadlock” ou travamento por falta de recursos serão abordadas em outros artigos deste blog.
No entanto, como a equipe de suporte de servidores que normalmente não possue habilidades de debugging poderiam agir para adiantar o processo de troubleshooting de travamento de servidores, ou mesmo solucioná-los?
a- Observar a freqüência do travamento. É aleatório, ou ocorre com uma freqüência prevista? Se o mesmo ocorre com freqüência prevista, é bastante possível que a causa possa estar ligada a esgotamento de recursos de memória.
b- Observar o log de sistema, este nos ajudará a identificar a questão “a”, ao observar-se a freqüência dos eventos 6008 que indicam reinicio inesperado do servidor. O mesmo log de eventos poderá nos dar outras indicações. Quais os eventos precedentes ao travamento? Eventos indicando erro de disco? Eventos 2019 ou 2020 basicamente mostrando esgotamento de memória de kernel? (artigo a ser publicado neste blog)
https://support.microsoft.com/default.aspx?scid=kb;[LN];177415
c- Quais foram as últimas modificações feitas no servidor desde que o início do problema se deu? O log c:\windows\setupapi.log poderá levá-lo aos drivers instalados anteriormente ao início do problema. Caso o log mostre novos drivers instalados próximo a data, se possível remove-lo ou atualiza-lo.
d- Iniciar um log de performance monitor com os objetos processor, process, logycal disk, physical disk, memory, network interface. Verificar pelos contadores do process, se há alguma tendência de vazamento de “Handle Counts”, ou “Virtual Memory”, ou ainda “Private Bytes” entre outros contadores. É importante que o log de performance monitor se inicie ao boot e rode até a ocorrência do travamento.
https://support.microsoft.com/default.aspx?scid=kb;[LN];248345
e- Verificar uma das questões mais importantes que é estar com a máquina preparada pêra gerar um dump de memória manualmente. Veja documentos abaixo as condições necessárias para que o dump seja gerado com sucesso.
https://support.microsoft.com/default.aspx?scid=kb;EN-US;130536
Finalmente gostaria de tocar em um ponto importante. É comum pensarmos que um servidor que apresenta comportamentos inesperados como travamento, poderia ser concertado através da reinstalação do mesmo. Tecnicamente ao reinstalar o servidor e todos os drivers existentes no mesmo com as mesmas versões, o problema voltará a ocorrer da mesma forma, portanto é um erro a tentativa desta solução para este tipo de problema.
3. Conclusão
Em se seguindo com os conceitos e passos acima, estaremos caminhando rumo à resolução de problemas de travamento de servidores e estações com o sistema operacional Windows.
https://windowssdk.msdn.microsoft.com/en-us/library/ms675530.aspx