Как убить зависший сервис на 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?) В надежде сузить конкретную причину или конфликт, но ваши варианты решения проблемы либо живут с ней, либо перезагружают сервер, чтобы устранить ее.

Есть ли причина, по которой ты не думал жить с этим? Если это всего лишь процесс зомби, и он ни на что не влияет, я думаю, вы могли бы отложить перезагрузку до периода обслуживания или более подходящего времени. Как правило, мой подход, когда процесс зомби или зависания ни на что не мешает - позаботьтесь об этом во время следующего цикла исправлений или запланированного периода обслуживания.

Другие вопросы по тегам