У меня есть сервер 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. Затем мы сможем перезагрузить сервер когда все тише, но, увы, это не сработало.
Stack
, как выглядит стек для застрявших потоков?Ответы:
Хотя кажется, что вы уже поняли это, проблема в том, что процесс ожидает что-то в ядре. (Обычно это проблема уровня драйвера, но не всегда.) Единственный способ уничтожить такой процесс - выгрузить ядро, что, конечно, невозможно сделать без перезагрузки.
Возможно, стоит попробовать отладку ядра ( этот инструмент работает на 2008 R2 ?) В надежде сузить конкретную причину или конфликт, но ваши варианты решения проблемы либо живут с ней, либо перезагружают сервер, чтобы устранить ее.
Есть ли причина, по которой ты не думал жить с этим? Если это всего лишь процесс зомби, и он ни на что не влияет, я думаю, вы могли бы отложить перезагрузку до периода обслуживания или более подходящего времени. Как правило, мой подход, когда процесс зомби или зависания ни на что не мешает - позаботьтесь об этом во время следующего цикла исправлений или запланированного периода обслуживания.
источник