Как убить зависший сервис на Windows 2008R2
У меня есть сервер Windows 2008R2 под управлением NSClient++. По какой-то причине служба перевернула свои штанишки и перестала отвечать на опрос Nagios.
Когда я попытался перезапустить службу, диспетчеру службы потребовалось много времени, чтобы попытаться убить службу, а затем, в конечном итоге, я получил сообщение "служба заняла слишком много времени, чтобы ответить". Но... он также запускает новый экземпляр службы.
Если я смотрю в диспетчере задач или tasklist
Теперь я вижу два случая nsclient++.exe
Бег.
Я пытался убить оба из них, используя:
щелкните правой кнопкой мыши и "Завершить процесс" в диспетчере задач - делает вид, что убивает процесс, и не сообщает об ошибках (например, "Отказано в доступе"), но процесс все еще там.
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
аккаунт... и вы догадались, что процесс все еще работает.
Все вышеперечисленное было запущено в командной строке администратора.
Что еще можно попробовать, кроме перезагрузки, которая на самом деле не идеальна (коробка является достаточно важным рабочим сервером)?
Сервер не находится под давлением ресурсов (память, процессор, диск и т. Д.), И все, что на нем работает, работает просто отлично.
Быстрый просмотр вкладки потоков в SysInternals Process Explorer показывает, что все эти nsclient++.exe
экземпляры застряли разгрузки:
Кроме того, я также попытался убить все соединения TCP для этих процессов зомби (?) (С TCPView) в надежде, что я смогу запустить новый экземпляр и он сможет захватить порт 5666. Затем мы сможем перезагрузить сервер когда все тише, но, увы, это не сработало.
1 ответ
Даже если вы уже поняли это, проблема в том, что процесс ожидает что-то в ядре. (Обычно это проблема уровня драйвера, но не всегда.) Единственный способ убить такой процесс - выгрузить ядро, что, конечно, невозможно сделать без перезагрузки.
Возможно, стоит попробовать отладку ядра ( этот инструмент работает на 2008 R2?) В надежде сузить конкретную причину или конфликт, но ваши варианты решения проблемы либо живут с ней, либо перезагружают сервер, чтобы устранить ее.
Есть ли причина, по которой ты не думал жить с этим? Если это всего лишь процесс зомби, и он ни на что не влияет, я думаю, вы могли бы отложить перезагрузку до периода обслуживания или более подходящего времени. Как правило, мой подход, когда процесс зомби или зависания ни на что не мешает - позаботьтесь об этом во время следующего цикла исправлений или запланированного периода обслуживания.