Event ID 5003 WAS: сбой остановки рабочего процесса пула IIS
Симптомы зависания пула приложений (Event ID 5003)
В журнале System фиксируется ошибка: Event ID 5003: A worker process serving application pool '[Имя_пула]' failed to stop a listener channel within the allotted time. Служба WAS попыталась корректно перезапустить пул приложений, но зависшие потоки рабочего процесса w3wp.exe не ответили на сигнал завершения.
| Симптом | Описание проблемы |
|---|---|
| Зависание перезапуска (Recycle) | Пул приложений бесконечно находится в состоянии «Stopping» |
| Утечка дескрипторов и памяти | Старый процесс w3wp.exe продолжает занимать RAM и блокировать файлы сайта |
| Ошибки 503 при рециркуляции | Посетители получают ошибки недоступности сайта во время ночного перезапуска пула |
Пошаговое решение зависания пула (Event ID 5003)
- Найдите и принудительно завершите зависший процесс w3wp.exe:
# Поиск PID зависшего пула приложений IIS:
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" list wps
# Принудительное завершение зависшего рабочего процесса по имени пула:
Get-CimInstance Win32_Process -Filter "Name = 'w3wp.exe'" | Where-Object { $_.CommandLine -like "*ИмяПула*" } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }- Увеличьте лимит времени на остановку процесса (Shutdown Time Limit): если вашему приложению требуется больше времени для завершения транзакций (по умолчанию 90 секунд):
# Увеличение Shutdown Time Limit до 300 секунд для указанного пула:
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set apppool /apppool.name:"ИмяПула" /processModel.shutdownTimeLimit:"00:05:00"- Включите принудительное завершение зависших процессов (Orphan Worker Process): настройте немедленное уничтожение неотвечающих процессов вместо вечного ожидания.
Анализ кода: Если процесс w3wp.exe регулярно висит при остановке, проверьте приложение на наличие незакрытых SQL-соединений, бесконечных циклов в фоновых задачах или взаимоблокировок (Deadlocks).
Частые вопросы (FAQ)
Почему процесс w3wp.exe не может остановиться самостоятельно?
Процесс ожидает завершения выполнения внешних блокирующих вызовов (например, зависшего запроса к базе данных или внешнему веб-сервису).
Что такое Recycling (Рециркуляция) в IIS?
Это штатный механизм перезапуска рабочего процесса пула для очистки фрагментированной памяти и предотвращения утечек ресурсов.
Как создать дамп зависшего процесса w3wp.exe перед его закрытием?
Используйте утилиту procdump от Sysinternals: procdump.exe -ma <PID_w3wp> C:\dumps\.
Где настроить расписание рециркуляции пула приложений?
В IIS Manager выберите 'Пулы приложений' -> нужный пул -> в правом меню 'Переработка...' (Recycling).