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 tasklist
je peux maintenant voir deux instances de l' nsclient++.exe
exé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
- rapportsSUCCESS: 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>
- rapportsProcess <PID> killed
- mais le processus est toujours là.exécuter
at hh:mm pskill <PID>
pour arriverpskill
à le faire en tant queSYSTEM
compte ... 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++.exe
instances sont bloquées lors du déchargement:
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é.
Stack
, à quoi ressemble la pile pour les fils bloqués?Réponses:
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.
la source