В настоящее время у нас работает несколько процессов с одинаковым именем образа: w3wp.exe.
У одного из них есть утечка памяти, поэтому, пока разработчики не подключат, мы хотим запустить запланированную задачу, чтобы убить процесс до того, как на сервере закончится оперативная память.
Я использовал:
taskkill / F / FI "MEMUSAGE gt 5000000" / IM "w3wp.exe"
Это убивает процесс, когда использование памяти превышает 5 ГБ. Я выполняю это как запланированное задание каждые 5 минут.
Это работает, но также убивает другие экземпляры w3wp.exe. Все они работают под NTAUTHORITY.
Мой вопрос: есть ли способ изолировать один процесс, из которого несколько процессов работают под одним и тем же именем образа?
Кто-нибудь знает, как это сделать лучше?
Привет,
Майкл
Попробуйте в пакетном файле сделать следующее:
@echo off
set tmpfile=%tmp%\tasklist~.txt
tasklist /FI "MEMUSAGE gt 5000000" | FIND "w3wp.exe" > "%tmpfile%"
for /F "tokens=2*" %%i in (%tmpfile%) do @taskkill /f /PID %%i
del %tmpfile%
Изменить: на самом деле есть еще лучший способ:
Во-первых, вам нужно изолировать приложение в его собственном пуле приложений. Затем просто введите следующую команду:% windir% \ System32 \ inetsrv \ appcmd.exe перезапустите пул приложений "MyApplicationPool"
(используйте% windir% \ System32 \ inetsrv \ appcmd.exe list apppool, чтобы получить имя, если необходимо)
Это должно аккуратно переработать приложение (если оно действительно не зависло).