Comment tuer un service bloqué sur Windows 2008R2

8

J'ai un serveur Windows 2008R2 exécutant NSClient ++. Pour une raison quelconque, le service a mis sa culotte dans une torsion et a cessé de répondre au sondage de Nagios.

Lorsque j'ai essayé de redémarrer le service, le gestionnaire de services met beaucoup de temps à essayer de tuer le service, puis abandonne finalement avec un message du type "le service a mis trop de temps à répondre". Mais ... cela démarre également une nouvelle instance du service.

Si je regarde dans le Gestionnaire des tâches ou tasklistje peux maintenant voir deux instances de l' nsclient++.exeexécution.

J'ai essayé de tuer les deux en utilisant:

  • clic droit et "Terminer le processus" dans le gestionnaire de tâches - fait semblant de tuer le processus et ne signale aucune erreur (par exemple, accès refusé) mais le processus est toujours là.

  • taskkill /PID <proc id> /F- rapports SUCCESS: The process with PID 6672 has been terminated.mais le processus est toujours en cours.

  • téléchargé SysInternals PsTools et exécuté pskill <PID>- rapports Process <PID> killed- mais le processus est toujours là.

  • exécuter at hh:mm pskill <PID>pour arriver pskillà le faire en tant que SYSTEMcompte ... et vous l'avez deviné, le processus est toujours en cours.

Tous les éléments ci-dessus ont été exécutés dans une invite de commandes administrateur.

À part un redémarrage qui n'est pas vraiment idéal (la box est un serveur de production assez critique), que puis-je essayer d'autre?

Le serveur n'est soumis à aucune pression sur les ressources (mémoire, CPU, disque, etc.) et tout ce qui tourne dessus avance très bien.

Un rapide coup d'œil à l'onglet des threads dans SysInternals Process Explorer montre que toutes ces nsclient++.exeinstances sont bloquées lors du déchargement:

entrez la description de l'image ici

En passant, j'ai également essayé de tuer toutes les connexions TCP pour ces processus zombies (?) (Avec TCPView) dans l'espoir que je pourrais démarrer une nouvelle instance et qu'il serait en mesure de saisir le port 5666. Ensuite, nous pourrions redémarrer le serveur quand les choses sont plus calmes, mais hélas ça n'a pas marché.

Kev
la source
3
Si un processus ne tue pas avec le Gestionnaire des tâches, il est en fait coincé dans une routine du noyau ... Windows a donc des problèmes. Avez-vous installé des pilotes "intéressants"?
Chris S
Il n'y a rien de vraiment exotique au niveau du conducteur. C'est XenServer VM, donc les pilotes Xen habituels avec lesquels nous n'avons généralement pas de problème. Nous exécutons également R1 CDP Enterprise et cela semble fonctionner dans le cadre de nos paramètres de fonctionnement normaux. J'ai ajouté une capture d'écran montrant l'onglet Thread de procexp.exe.
Kev
Si vous cliquez sur Stack, à quoi ressemble la pile pour les fils bloqués?
HeatfanJohn
@HeatfanJohn - J'y ai pensé aussi mais je reçois une erreur "Erreur d'accès au thread" quand je fais ça.
Kev
Je suppose que cela est lié au commentaire de @ChrisS sur le fait d'être coincé dans une routine du noyau.
HeatfanJohn

Réponses:

3

Même s'il semble que vous l'ayez déjà compris, le problème est que le processus attend quelque chose sur le noyau. (Il s'agit généralement d'un problème au niveau du pilote, mais pas toujours.) La seule façon de tuer un tel processus est de décharger le noyau, ce que, bien sûr, vous ne pouvez pas faire sans redémarrer.

Cela peut valoir la peine d'essayer un débogage du noyau ( cet outil fonctionne-t-il sur 2008 R2 ?) Dans l'espoir de réduire la cause spécifique ou le conflit, mais vos options pour gérer le problème sont soit de vivre avec, soit de redémarrer le serveur pour l'éliminer.

Y a-t-il une raison pour laquelle vous n'avez pas envisagé de vivre avec? Si c'est juste un processus zombie, et que cela n'a aucun impact, je pense que vous pourriez reporter un redémarrage jusqu'à une fenêtre de maintenance ou un moment plus opportun. Généralement, mon approche, lorsque le processus zombie ou bloqué n'interfère avec rien - prenez-en soin lors du prochain cycle de correctifs ou de la fenêtre de maintenance planifiée.

HopelessN00b
la source
Malheureusement, trop tard pour examiner ces processus dans WinDbg, les gars de l'infrastructure ont redémarré le serveur. Mais pratique à savoir pour la prochaine fois.
Kev
L'autre problème était que nous ne pouvions pas vivre avec ça comme ça. Le service est NSClient ++ que nous utilisons conjointement avec nagios. Je ne pouvais même pas obtenir un nouvel exe de service pour exécuter et répondre aux demandes d'interrogation, je pense que parce que ces processus zombiés étaient toujours accrochés au port 5666 sur lequel il écoute (on pourrait certainement voir l'un d'entre eux s'accrocher au port dans TCPView et moi n'a pas pu le fermer).
Kev
Eh bien, c'est certainement une très bonne raison de ne pas vivre avec.
HopelessN00b
Si cela se reproduit, n'oubliez pas un autre bébé de Mark Russinovich - Process Monitor. Pointez procmon sur le processus pour voir ce qu'il fait. Outil merveilleux.
Simon Catlin
@SimonCatlin - oui, je l'ai fait aussi mais rien ne m'a vraiment sauté aux yeux.
Kev