Event ID 50002 WAS: аварийное завершение процесса пула IIS (Crash)
Симптомы аварийного падения w3wp.exe (Event ID 50002)
В журнале System фиксируется критическая ошибка Event ID 50002: A worker process serving application pool '[Имя_Пула]' shut down unexpectedly. The process id was '[PID]' от источника WAS.
| Симптом | Проявление |
|---|---|
| Ошибка 503 Service Unavailable | Пул приложений аварийно отключается из-за срабатывания защиты Rapid-Fail Protection |
| Обрыв клиентских HTTP-запросов | Пользователи получают ошибку «Соединение сброшено» (Connection Reset) |
| Ошибки в Application Log (Event ID 1000 / 1026) | Записи об аварийных сбоях в модулях clr.dll, ntdll.dll или нативных DLL |
Пошаговое устранение сбоя Event ID 50002
Ошибка 50002 означает, что процесс w3wp.exe завершился аварийно из-за необработанного исключения в коде приложения, переполнения стека (StackOverflowException) или сбоя нативной неуправляемой библиотеки.
- Проверьте ошибки среды исполнения .NET в журнале Application:
# Поиск связанных событий падения процессов IIS за последние 24 часа:
Get-WinEvent -FilterHashtable @{LogName='Application'; Level=1,2; StartTime=(Get-Date).AddDays(-1)} | Where-Object { $_.ProviderName -match "Application Error|Application Crash|.NET Runtime" } | Format-List TimeCreated, Message- Настройте автоматический сбор аварийных дампов памяти с помощью ProcDump:
# Скачайте утилиту Sysinternals ProcDump и запустите мониторинг сбоев пула:
# Команда создает полный дамп памяти при возникновении фатального исключения:
C:\Tools\procdump.exe -e 1 -g -f "" -ma -w w3wp.exe C:\Dumps\- Временно отключите защиту от быстрого сбоя (Rapid-Fail Protection) для локализации проблемы:
# Отключение автоматической блокировки пула при частых падениях:
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set apppool /apppool.name:"ИмяПула" /failure.rapidFailProtection:false- Проверьте битность пула и нативных модулей: если приложение использует 32-битные драйверы БД (например, Access или старые Oracle-клиенты), включите 32-битный режим:
# Включение поддержки 32-разрядных приложений в пуле:
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set apppool /apppool.name:"ИмяПула" /enable32BitAppOnWin64:trueАнализ кода: В 90% случаев аварийные сбои без создания стандартного .NET-исключения вызваны ошибками StackOverflowException (бесконечная рекурсия) или AccessViolationException при вызове неуправляемых DLL через P/Invoke.
Частые вопросы (FAQ)
Почему пул приложений переходит в статус 'Stopped' после ошибки 50002?
Срабатывает механизм Rapid-Fail Protection: если рабочий процесс падает 5 раз за 5 минут, IIS останавливает пул во избежание бесконечной перегрузки процессора.
Чем открыть и как проанализировать полученный файл дампа .dmp?
Используйте официальную утилиту WinDbg (Windows Debugger) с загрузкой символов Microsoft (команда !analyze -v) или утилиту DebugDiag Analysis.
Где посмотреть код возврата аварийно завершившегося процесса?
В теле события 50002 перейдите на вкладку Details в формат XML — шестнадцатеричный код (например, 0xc0000005) указывает на точную причину аварии ядра.
Как настроить изолированный запуск для проблемного сайта?
Создайте для сайта выделенный пул приложений (Dedicated App Pool), чтобы его падение не затрагивало работу остальных проектов на сервере.