So beenden Sie einen blockierten Dienst unter Windows 2008R2

8

Ich habe einen Windows 2008R2-Server mit NSClient ++. Aus irgendeinem Grund hat der Dienst seine Schlüpfer in eine Wendung gebracht und reagiert nicht mehr auf Nagios-Umfragen.

Als ich versuchte, den Dienst neu zu starten, brauchte der Dienstmanager lange, um zu versuchen, den Dienst zu beenden, und gab schließlich die Meldung "Der Dienst hat zu lange gebraucht, um zu antworten" auf. Aber ... es wird auch eine neue Instanz des Dienstes gestartet.

Wenn ich in den Task-Manager schaue oder tasklistjetzt zwei Instanzen der nsclient++.exeAusführung sehe .

Ich habe versucht, beide zu töten, indem ich:

  • Rechtsklick und "Prozess beenden" im Task-Manager - gibt vor, den Prozess abzubrechen, und meldet keine Fehler (z. B. Zugriff verweigert), aber der Prozess ist noch vorhanden.

  • taskkill /PID <proc id> /F- meldet, SUCCESS: The process with PID 6672 has been terminated.aber der Prozess läuft noch.

  • SysInternals PsTools heruntergeladen und ausgeführt pskill <PID>- Berichte Process <PID> killed- aber der Prozess ist noch da.

  • ausführen at hh:mm pskill <PID>, um pskilldies als SYSTEMKonto zu tun ... und Sie haben es erraten, der Prozess läuft noch.

Alle oben genannten Schritte wurden an einer Administrator-Eingabeaufforderung ausgeführt.

Was kann ich außer einem Neustart, der nicht wirklich ideal ist (die Box ist ein ziemlich geschäftskritischer Produktionsserver), noch versuchen?

Der Server steht nicht unter Ressourcendruck (Speicher, CPU, Festplatte usw.) und alles, was darauf läuft, tuckert einwandfrei.

Ein kurzer Blick auf die Registerkarte "Threads" im SysInternals Process Explorer zeigt, dass alle diese nsclient++.exeInstanzen beim Entladen hängen bleiben:

Geben Sie hier die Bildbeschreibung ein

Nebenbei habe ich auch versucht, alle TCP-Verbindungen für diese Zombie (?) -Prozesse (mit TCPView) zu beenden, in der Hoffnung, dass ich eine neue Instanz starten und Port 5666 abrufen kann. Dann können wir den Server neu starten wenn die Dinge ruhiger sind, aber leider hat das nicht funktioniert.

Kev
quelle
3
Wenn ein Prozess mit dem Task-Manager nicht beendet wird, steckt er tatsächlich in einer Kernel-Routine fest ... Windows hat also Probleme. Haben Sie "interessante" Treiber installiert?
Chris S
In Bezug auf den Fahrer gibt es nichts wirklich Exotisches. Es ist XenServer VM, hat also die üblichen Xen-Treiber, mit denen wir im Allgemeinen keine Probleme haben. Wir führen auch R1 CDP Enterprise aus und das scheint innerhalb unserer normalen Betriebsparameter zu funktionieren. Ich habe einen Screenshot hinzugefügt, der die Registerkarte des Threads aus procexp.exe zeigt.
Kev
Wenn Sie auf klicken Stack, wie sieht der Stapel für die festsitzenden Threads aus?
HeatfanJohn
@HeatfanJohn - Ich habe auch daran gedacht, aber dabei eine Fehlermeldung "Fehler beim Zugriff auf den Thread" erhalten .
Kev
Ich vermute, das hängt mit dem Kommentar von @ChrisS zusammen, dass er in einer Kernel-Routine stecken bleibt.
HeatfanJohn

Antworten:

3

Obwohl es so aussieht, als hätten Sie dies bereits herausgefunden, besteht das Problem darin, dass der Prozess auf dem Kernel auf etwas wartet. (Dies ist normalerweise ein Problem auf Treiberebene, aber nicht immer.) Die einzige Möglichkeit, einen solchen Prozess abzubrechen, besteht darin, den Kernel zu entladen, was natürlich nicht ohne einen Neustart möglich ist.

Es könnte sich lohnen, ein Kernel-Debugging zu versuchen ( funktioniert dieses Tool unter 2008 R2 ?), In der Hoffnung, die spezifische Ursache oder den Konflikt einzugrenzen, aber Ihre Optionen zur Behebung des Problems bestehen entweder darin, oder Sie starten den Server neu, um es zu beseitigen.

Gibt es einen Grund, warum Sie nicht daran gedacht haben, damit zu leben? Wenn es sich nur um einen Zombie-Prozess handelt und keine Auswirkungen hat, können Sie einen Neustart bis zu einem Wartungsfenster oder einer günstigeren Zeit verschieben. Normalerweise ist mein Ansatz, wenn der Zombie- oder Hang-Prozess nichts stört - kümmern Sie sich während des nächsten Patch-Zyklus oder des geplanten Wartungsfensters darum.

HopelessN00b
quelle
Leider zu spät, um diese Prozesse in WinDbg zu untersuchen, haben die Infrastruktur-Leute den Server neu gestartet. Aber praktisch für das nächste Mal zu wissen.
Kev
Das andere Problem war, dass wir so nicht damit leben konnten. Der Dienst ist NSClient ++, den wir in Verbindung mit Nagios verwenden. Ich konnte nicht einmal eine neue Service-Exe zum Ausführen und Beantworten von Abfrageanfragen bekommen. Ich denke, diese zombierten Prozesse hingen immer noch an Port 5666, den sie abhören (sicherlich konnte einer von ihnen sehen, dass er immer noch den Port in TCPView und mir festhielt konnte es nicht schließen).
Kev
Das ist sicherlich ein sehr guter Grund, nicht damit zu leben.
HopelessN00b
Wenn es wieder passiert, vergessen Sie nicht ein weiteres Baby von Mark Russinovich - Process Monitor. Richten Sie procmon auf den Prozess, um zu sehen, was er tut. Wunderbares Werkzeug.
Simon Catlin
@ SimonCatlin - ja, das habe ich auch gemacht, aber mir ist nichts wirklich aufgefallen.
Kev