Come uccidere un servizio sospeso su Windows 2008R2


8

Ho un server Windows 2008R2 con NSClient ++. Per qualche ragione il servizio ha cambiato i suoi mutandoni e ha smesso di rispondere al sondaggio di Nagios.

Quando ho provato a riavviare il servizio, il gestore del servizio impiega molto tempo per provare a terminare il servizio, quindi alla fine rinuncia a un messaggio sulla falsariga di "il servizio ha impiegato troppo tempo per rispondere". Ma ... avvia anche una nuova istanza del servizio.

Se guardo in Task Manager o tasklistora posso vedere due istanze di nsclient++.exeesecuzione.

Ho provato a uccidere entrambi usando:

  • tasto destro del mouse e "Termina processo" in Gestione attività - finge di interrompere il processo e non segnala errori (ad esempio Accesso negato) ma il processo è ancora lì.

  • taskkill /PID <proc id> /F- segnala SUCCESS: The process with PID 6672 has been terminated.ma il processo è ancora in esecuzione.

  • scaricato SysInternals PsTools ed eseguito pskill <PID>- rapporti Process <PID> killed- eppure il processo è ancora lì.

  • esegui at hh:mm pskill <PID>per pskillfarlo come l' SYSTEMaccount ... e hai indovinato che il processo è ancora in esecuzione.

Tutto quanto sopra è stato eseguito nel prompt dei comandi dell'amministratore.

A parte un riavvio che non è proprio l'ideale (la scatola è un server di produzione abbastanza mission-critical), cos'altro posso provare?

Il server non subisce alcuna pressione delle risorse (memoria, CPU, disco, ecc.) E tutto ciò che lo sta eseguendo sta andando bene.

Come una rapida occhiata alla scheda discussioni in SysInternals Process Explorer mostra che tutte queste nsclient++.exeistanze sono bloccate durante lo scaricamento:

inserisci qui la descrizione dell'immagine

A parte questo, ho anche provato a uccidere tutte le connessioni TCP per questi processi zombie (?) (Con TCPView) nella speranza di poter avviare una nuova istanza e che sarebbe in grado di afferrare la porta 5666. Quindi potremmo riavviare il server quando le cose sono più tranquille, ma purtroppo non ha funzionato.


3
Se un processo non si interrompe con Task Manager, in realtà è bloccato in una routine del kernel ... Quindi Windows ha dei problemi. Hai dei driver "interessanti" installati?
Chris S,

Non c'è niente di veramente esotico in termini di guida. È XenServer VM, quindi ha i soliti driver Xen di cui generalmente non abbiamo problemi. Eseguiamo anche R1 CDP Enterprise e sembra funzionare all'interno dei nostri normali parametri operativi. Ho aggiunto uno screenshot che mostra la scheda Discussione da procexp.exe.
Kev

Se fai clic su Stack, come appare lo stack per i thread bloccati?
Heatfan John,

@HeatfanJohn - Ci ho pensato anche io, ma quando lo faccio viene visualizzato l'errore "Errore durante l'accesso al thread" .
Kev

La mia ipotesi è che è legato al commento di @ChrisS sull'essere bloccato in una routine del kernel.
Heatfan John,

Risposte:


3

Anche se sembra che tu l'abbia già capito, il problema è che il processo sta aspettando qualcosa sul kernel. (Questo di solito è un problema a livello di driver, ma non sempre.) L'unico modo per terminare un tale processo è scaricare il kernel, che, ovviamente, non puoi fare a meno del riavvio.

Potrebbe valere la pena provare un po 'di debug del kernel ( questo strumento funziona su 2008 R2 ?) Nella speranza di restringere la causa specifica o il conflitto, ma le opzioni per gestire il problema sono o conviverci o riavviare il server per eliminarlo.

C'è un motivo per cui non hai considerato di conviverci? Se è solo un processo di zombi e non ha alcun impatto, penso che potresti rimandare un riavvio fino a una finestra di manutenzione o un tempo più opportuno. In genere il mio approccio, quando il processo di zombi o appesi non interferisce con nulla, prenditene cura durante il prossimo ciclo di patch o la finestra di manutenzione programmata.


Purtroppo troppo tardi per esaminare questi processi in WinDbg, i ragazzi dell'infrastruttura hanno riavviato il server. Ma utile sapere per la prossima volta.
Kev

L'altro problema era che non potevamo conviverci in questo modo. Il servizio è NSClient ++ che utilizziamo insieme a nagios. Non riuscivo nemmeno a ottenere un nuovo servizio exe da eseguire e rispondere alle richieste di polling, penso perché questi processi zombi erano ancora sospesi sulla porta 5666 su cui è in ascolto (potrei certamente vederne uno ancora trattenere la porta in TCPView e io impossibile chiuderlo).
Kev

Bene, questa è sicuramente un'ottima ragione per non conviverci.
HopelessN00b

Se succede di nuovo, non dimenticare un altro dei bambini di Mark Russinovich: Process Monitor. Indica il processo per vedere cosa sta facendo. Strumento meraviglioso.
Simon Catlin,

@SimonCatlin - sì, l'ho fatto anch'io ma niente mi è saltato fuori.
Kev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.