我有一个运行NSClient ++的Windows 2008R2服务器。 由于某种原因,该服务已经得到了短裤的内裤,并停止响应Nagios投票。
当我尝试重新启动服务时,服务pipe理器需要很长时间来尝试终止服务,然后最终放弃了“服务花费太长时间来响应”的消息。 但是…它也启动了一个新的服务实例。
如果我查看任务pipe理器或任务tasklist现在可以看到运行nsclient++.exe两个实例。
我试图杀死这两个使用:
右键单击任务pipe理器中的“结束进程” – 假装杀死进程并报告没有错误(例如访问被拒绝),但进程仍然存在。
taskkill /PID <proc id> /F – 报告SUCCESS: The process with PID 6672 has been terminated. 但是这个过程还在运行。
下载SysInternals PsTools并运行pskill <PID> – 报告Process <PID> killed – 但过程仍然存在。
at hh:mm pskill <PID>执行得到pskill做这个SYSTEM帐户…你猜对了,这个进程还在运行。
以上所有都是在pipe理员命令提示符下运行的。
除了不太理想的重启之外(这个盒子是一个相当关键的生产服务器),还有什么我可以尝试的?
服务器没有受到任何资源压力(内存,CPU,磁盘等),其上运行的一切都很好。
快速查看nsclient++.exe Process Explorer中的线程选项卡,可以看出所有这些nsclient++.exe实例都被卡住了:

另外,我还尝试了杀死所有这些僵尸(?)进程的TCP连接(使用TCPView),希望能够启动一个新的实例,并且能够抓取端口5666.然后,我们可以重启服务器当事情更安静,但唉,没有奏效。
即使看起来你已经知道了这个问题,问题是这个进程正在内核上等待一些东西。 (这通常是一个驱动程序级别的问题,但并不总是如此)。杀死这样一个进程的唯一方法是卸载内核,当然,如果不重新启动,这是无法做到的。
可能值得尝试一些内核debugging( 这个工具是否可以在2008 R2上运行 ?),希望能够缩小特定原因或冲突的范围,但是处理这个问题的scheme要么与之共存,要么重新引导服务器以消除它。
你有没有考虑过与之共处? 如果这只是一个僵尸进程,并没有影响任何东西,我认为你可以推迟一个重启,直到维护时间或更合适的时间。 通常情况下,我的方法,当僵尸或挂起的过程不干涉任何事情 – 在下一个修补程序周期或计划维护窗口中处理它。