So beenden Sie einen hängenden Dienst unter Windows 2008R2

So beenden Sie einen hängenden Dienst unter Windows 2008R2

Ich habe einen Windows 2008R2-Server, auf dem NSClient++ läuft. Aus irgendeinem Grund ist der Dienst in Schwierigkeiten geraten und reagiert nicht mehr auf Nagios-Pollings.

Als ich versuchte, den Dienst neu zu starten, brauchte der Dienstmanager lange, um den Dienst zu beenden, und gab schließlich mit einer Meldung wie „Die Antwort des Dienstes dauerte zu lange“ auf. Aber ... er startet auch eine neue Instanz des Dienstes.

Wenn ich in den Task-Manager schaue, tasklistsehe ich jetzt zwei nsclient++.exelaufende Instanzen.

Ich habe versucht, beide mit folgendem zu beenden:

  • Klicken Sie mit der rechten Maustaste und wählen Sie im Task-Manager „Prozess beenden“ – gibt vor, den Prozess zu beenden, und meldet keine Fehler (z. B. Zugriff verweigert), aber der Prozess ist immer noch vorhanden.

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

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

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

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

Was kann ich außer einem Neustart, der nicht wirklich ideal ist (bei der Box handelt es sich um einen ziemlich unternehmenskritischen Produktionsserver), noch versuchen?

Die Ressourcen des Servers (Speicher, CPU, Festplatte usw.) stehen nicht unter Druck und alles, was auf ihm läuft, läuft einwandfrei.

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

Bildbeschreibung hier eingeben

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

Antwort1

Auch wenn Sie das anscheinend schon herausgefunden haben, besteht das Problem darin, dass der Prozess auf etwas vom Kernel wartet. (Das ist normalerweise ein Problem auf Treiberebene, aber nicht immer.) Die einzige Möglichkeit, einen solchen Prozess zu beenden, besteht darin, den Kernel zu entladen, was natürlich nicht ohne Neustart möglich ist.

Es könnte sich lohnen, etwas Kernel-Debugging auszuprobieren (funktioniert dieses Tool auf 2008 R2?) in der Hoffnung, die spezifische Ursache oder den Konflikt einzugrenzen, aber Ihre Optionen zur Lösung des Problems bestehen darin, entweder damit zu leben oder den Server neu zu starten, um es zu beheben.

Gibt es einen Grund, warum Sie nicht in Betracht gezogen haben, damit zu leben? Wenn es sich nur um einen Zombie-Prozess handelt und dieser keine Auswirkungen hat, könnten Sie einen Neustart meiner Meinung nach bis zu einem Wartungsfenster oder einem günstigeren Zeitpunkt verschieben. Normalerweise ist mein Ansatz, wenn der Zombie- oder hängende Prozess nichts stört, sich während des nächsten Patch-Zyklus oder geplanten Wartungsfensters darum zu kümmern.

verwandte Informationen