Назад | Перейти на главную страницу

Как я могу удаленно убить процесс на сервере Windows, когда сервер превысил лимит памяти?

Контекст

Я использую и управляю * сервером Windows на работе. Он используется для общих вычислений до 5 пользователей одновременно через RDP. Сервер имеет 128 ГБ оперативной памяти, чего достаточно для работы, которую мы с ним делаем. Однако время от времени один из процессов съедает почти всю память из-за ошибки в скрипте пользователя (например, ошибочная инициализация массива, забвение удаления переменной).

Когда это происходит, все соединения RDP разрываются, и сервер становится неуправляемым, пока не будет уменьшено использование памяти или пока сервер не будет перезапущен. Последнее является крайней мерой, так как это приводит к потере данных для всех пользователей. Я не уверен, каков точный порог памяти до того, как произойдет этот «сбой», но он находится где-то в районе 97%.

То, что я пробовал

Команды, которые работают

Пока сервер находится под большой нагрузкой, я все еще могу получить от него ответ с помощью следующих команд

Команды, которые не работают

Я пробовал команды ниже, чтобы убить нарушающий процесс и восстановить контроль. К сожалению, ни один из них не работал в течение 10-15 минут.

Вопрос

Как я могу быстро убить процесс съедания памяти, когда сервер занимает ~ 97% своей памяти и не отвечает на приведенные выше команды?

* Корпоративный ИТ-отдел управляет сервером в целом, но я управляю периодическими обновлениями, управлением пользователями и установкой программного обеспечения.

Это похоже на утечку памяти, которую необходимо диагностировать / устранить путем обновления проблемного программного обеспечения.

А пока вы можете попробовать несколько вещей, чтобы держать это под контролем.

Если вы определили источник проблемы, вы можете настроить запланированную задачу, работающую как СИСТЕМА, чтобы завершить / перезапустить проблемный процесс / службу с интервалами / временами, которые будут иметь наименьшее количество нарушений.

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

Другой вариант, который работал, заключался в использовании метода PowerShell Get-WmiObject Terminate () в классе Win32_Process для уничтожения удаленного процесса.

Есть отличная статья, демонстрирующая, как это сделать с помощью WMI. Вот.