Como matar um serviço travado no Windows 2008R2

8

Eu tenho um servidor Windows 2008R2 executando o NSClient ++. Por alguma razão, o serviço alterou suas calcinhas e parou de responder às pesquisas do Nagios.

Quando tentei reiniciar o serviço, o gerente de serviço leva muito tempo para tentar matá-lo e, em seguida, desiste de uma mensagem parecida com "o serviço demorou muito para responder". Mas ... também inicia uma nova instância do serviço.

Se eu procurar no Gerenciador de tarefas ou tasklistagora posso ver duas instâncias de nsclient++.exeexecução.

Eu tentei matar os dois usando:

  • clique direito e "Finalizar processo" no gerenciador de tarefas - finge interromper o processo e não reporta erros (por exemplo, Acesso negado), mas o processo ainda está lá.

  • taskkill /PID <proc id> /F- relatórios, SUCCESS: The process with PID 6672 has been terminated.mas o processo ainda está em execução.

  • baixou o SysInternals PsTools e executou pskill <PID>- relatórios Process <PID> killed- mas o processo ainda está lá.

  • execute at hh:mm pskill <PID>para pskillfazer isso como a SYSTEMconta ... e você adivinhou que o processo ainda está em execução.

Todos os itens acima foram executados em um prompt de comando do administrador.

Além de uma reinicialização que não é realmente ideal (a caixa é um servidor de produção bastante crítico), o que mais posso tentar?

O servidor não está sob nenhuma pressão de recurso (memória, CPU, disco, etc.) e tudo o que está sendo executado está funcionando perfeitamente.

Uma rápida olhada na guia de threads no SysInternals Process Explorer mostra que todas essas nsclient++.exeinstâncias estão descarregando emperradas:

insira a descrição da imagem aqui

Além disso, eu também tentei matar todas as conexões TCP para esses processos zumbi (?) (Com TCPView) na esperança de poder iniciar uma nova instância e poder pegar a porta 5666. Em seguida, poderíamos reiniciar o servidor quando as coisas estão mais calmas, mas infelizmente isso não funcionou.

Kev
fonte
3
Se um processo não for eliminado com o Gerenciador de Tarefas, ele ficará preso na rotina do kernel ... Portanto, o Windows está tendo problemas. Você possui drivers "interessantes" instalados?
Chris S
Não há nada realmente exótico em termos de driver. É a XenServer VM e os drivers Xen usuais com os quais geralmente não temos problemas. Também executamos o R1 CDP Enterprise e isso parece estar operando dentro dos nossos parâmetros operacionais normais. Eu adicionei a captura de tela mostrando a guia do Thread no procexp.exe.
Kev
Se você clicar em Stack, como é a pilha dos threads presos?
precisa saber é o seguinte
@HeatfanJohn - Pensei nisso também, mas recebi o erro "Erro ao acessar o thread" quando faço isso.
Kev
Meu palpite é que está relacionado ao comentário do @ChrisS sobre ficar preso na rotina do kernel.
precisa saber é o seguinte

Respostas:

3

Mesmo que você já tenha percebido isso, o problema é que o processo está esperando no Kernel por alguma coisa. (Geralmente, esse é um problema no nível do driver, mas nem sempre.) A única maneira de eliminar esse processo é descarregar o kernel, o que, é claro, você não pode fazer sem reiniciar.

Pode valer a pena tentar alguma depuração do kernel ( essa ferramenta funciona no 2008 R2 ?) Na esperança de diminuir a causa ou o conflito específico, mas suas opções para lidar com o problema estão vivendo com ele ou reinicializando o servidor para eliminá-lo.

Existe uma razão para você não ter pensado em morar com ela? Se for apenas um processo zumbi e não estiver afetando nada, acho que você poderia adiar a reinicialização até uma janela de manutenção ou um momento mais oportuno. Normalmente, minha abordagem, quando o processo zumbi ou travado não está interferindo em nada - cuide dele durante o próximo ciclo de correção ou janela de manutenção agendada.

HopelessN00b
fonte
Infelizmente, tarde demais para examinar esses processos no WinDbg, a equipe de infraestrutura reiniciou o servidor. Mas útil para saber para a próxima vez.
Kev
O outro problema era que não podíamos viver assim. O serviço é o NSClient ++, que usamos em conjunto com os nagios. Eu não conseguia nem obter um exe de serviço novo para executar e responder às solicitações de pesquisa, acho que porque esses processos zumbis ainda estavam pendurados na porta 5666 na qual ela escuta (certamente podia ver um deles ainda segurando a porta no TCPView e eu não conseguiu fechá-lo).
Kev
Bem, essa é certamente uma boa razão para não viver com isso.
precisa
Se isso acontecer novamente, não se esqueça de outro bebê de Mark Russinovich - Process Monitor. Aponte procmon no processo para ver o que está fazendo. Ferramenta maravilhosa.
Simon Catlin
@SimonCatlin - sim, eu também fiz isso, mas nada realmente me chamou atenção.
Kev