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, tasklist
sehe ich jetzt zwei nsclient++.exe
laufende 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
- meldetSUCCESS: The process with PID 6672 has been terminated.
, aber der Vorgang läuft noch.habe SysInternals PsTools heruntergeladen und ausgeführt
pskill <PID>
– BerichteProcess <PID> killed
– aber der Prozess ist immer noch da.Ausführen
at hh:mm pskill <PID>
, umpskill
dies alsSYSTEM
Konto 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++.exe
Instanzen beim Entladen hängen bleiben:
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.