Cómo matar un servicio bloqueado en Windows 2008R2

8

Tengo un servidor Windows 2008R2 con NSClient ++. Por alguna razón, el servicio ha cambiado sus bragas y ha dejado de responder a las encuestas de Nagios.

Cuando traté de reiniciar el servicio, el administrador del servicio tarda mucho tiempo en intentar matarlo y finalmente se da por vencido con un mensaje que dice "el servicio tardó demasiado en responder". Pero ... también comienza una nueva instancia del servicio.

Si miro en el Administrador de tareas o tasklistahora puedo ver dos instancias de nsclient++.exeejecución.

Traté de matar a ambos usando:

  • haga clic con el botón derecho y "Finalizar proceso" en el administrador de tareas: pretende matar el proceso e informa que no hay errores (por ejemplo, Acceso denegado), pero el proceso sigue ahí.

  • taskkill /PID <proc id> /F- informa SUCCESS: The process with PID 6672 has been terminated.pero el proceso aún se está ejecutando.

  • descargué SysInternals PsTools y ejecuté pskill <PID>informes Process <PID> killed, pero el proceso todavía está allí.

  • ejecute at hh:mm pskill <PID>para pskillhacer esto como la SYSTEMcuenta ... y adivinó que el proceso aún se está ejecutando.

Todo lo anterior se ejecutó en un símbolo del sistema del Administrador.

Aparte de un reinicio que no es realmente ideal (la caja es un servidor de producción bastante crítico), ¿qué más puedo probar?

El servidor no está bajo ninguna presión de recursos (memoria, CPU, disco, etc.) y todo lo que se ejecuta en él está funcionando muy bien.

Como un vistazo rápido a la pestaña de subprocesos en SysInternals Process Explorer muestra que todas estas nsclient++.exeinstancias están atascadas en la descarga:

ingrese la descripción de la imagen aquí

Por otro lado, también intenté eliminar todas las conexiones TCP para estos procesos zombies (?) (Con TCPView) con la esperanza de poder iniciar una nueva instancia y poder tomar el puerto 5666. Luego podríamos reiniciar el servidor cuando las cosas están más tranquilas, pero eso no funcionó.

Kev
fuente
3
Si un proceso no mata con el Administrador de tareas, entonces está realmente atascado en una rutina del núcleo ... Entonces, Windows está teniendo problemas. ¿Tiene instalados controladores "interesantes"?
Chris S
No hay nada realmente exótico en el manejo del conductor. Es XenServer VM, por lo que tiene los controladores Xen habituales con los que generalmente no tenemos problemas. También ejecutamos R1 CDP Enterprise y parece estar operando dentro de nuestros parámetros operativos normales. Agregué una captura de pantalla que muestra la pestaña del hilo de procexp.exe.
Kev
Si hace clic en Stack, ¿cómo se ve la pila para los hilos atascados?
HeatfanJohn
@HeatfanJohn: también pensé en eso, pero recibo un error "Error al acceder al hilo" cuando hago eso.
Kev
Supongo que está relacionado con el comentario de @ChrisS sobre estar atascado en una rutina del núcleo.
HeatfanJohn

Respuestas:

3

Aunque parece que ya lo has resuelto, el problema es que el proceso está esperando algo en el Kernel. (Esto suele ser un problema de nivel de controlador, pero no siempre). La única forma de eliminar dicho proceso es descargar el kernel, lo que, por supuesto, no se puede hacer sin reiniciar.

Puede valer la pena intentar alguna depuración del kernel (¿ funciona esta herramienta en 2008 R2 ?) Con la esperanza de reducir la causa o el conflicto específico, pero sus opciones para manejar el problema son vivir con él o reiniciar el servidor para eliminarlo.

¿Hay alguna razón por la que no has considerado vivir con ella? Si es solo un proceso zombie, y no está afectando nada, creo que podría posponer un reinicio hasta una ventana de mantenimiento o un momento más oportuno. Por lo general, mi enfoque, cuando el proceso zombie o colgado no interfiere con nada, cuídalo durante el siguiente ciclo de parche o la ventana de mantenimiento programado.

HopelessN00b
fuente
Lamentablemente, es demasiado tarde para examinar estos procesos en WinDbg, los chicos de infraestructura han reiniciado el servidor. Pero útil para saber para la próxima vez.
Kev
El otro problema era que no podíamos vivir así. El servicio es NSClient ++, que utilizamos junto con nagios. Ni siquiera pude obtener un exe de servicio nuevo para ejecutar y responder a las solicitudes de sondeo, creo que debido a que estos procesos zombies todavía estaban colgados en el puerto 5666 que escucha (ciertamente podía ver que uno de ellos todavía se aferraba al puerto en TCPView y yo no se pudo cerrar).
Kev
Bueno, esa es ciertamente una muy buena razón para no vivir con eso.
HopelessN00b
Si vuelve a ocurrir, no olvides a otro de los bebés de Mark Russinovich: Process Monitor. Apunte procmon al proceso para ver qué está haciendo. Maravillosa herramienta
Simon Catlin
@SimonCatlin - sí, yo también hice eso pero nada realmente me llamó la atención.
Kev