Event ID 2216 IIS WAS: непредвиденное завершение процесса w3wp
Симптомы внезапного падения процесса (Event ID 2216)
В системном журнале System фиксируется ошибка от службы WAS: Event ID 2216: A worker process serving application pool '[Имя_пула]' terminated unexpectedly. The process id was '[PID]'. The process exit code was '[Код_завершения]'.
| Симптом | Проявление |
|---|---|
| Кратковременный сбой сайта | Пользователи получают ошибку 502 Bad Gateway или сброс соединения в момент падения процесса |
| Потеря сессий | Пользовательские сессии, хранимые в оперативной памяти (In-Memory), уничтожаются |
| Перезапуск w3wp.exe | В диспетчере задач появляется новый процесс w3wp.exe с новым идентификатором PID |
Диагностика и устранение падения w3wp.exe (Event ID 2216)
Код завершения процесса (Exit Code) указывает на причину сбоя (например, 0xc0000005 — Access Violation, 0xe0434352 — необработанное исключение CLR/.NET).
- Настройте автоматический сбор аварийного дампа памяти при падении:
# Создайте папку для дампов памяти:
New-Item -ItemType Directory -Path "C:\CrashDumps" -Force
# Настройка Windows Error Reporting (WER) на сбор полных дампов w3wp.exe:
$regPath = "HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe"
New-Item -Path $regPath -Force
Set-ItemProperty -Path $regPath -Name "DumpFolder" -Value "C:\CrashDumps"
Set-ItemProperty -Path $regPath -Name "DumpCount" -Value 5 -Type DWord
Set-ItemProperty -Path $regPath -Name "DumpType" -Value 2 -Type DWord # 2 = Полный дамп- Проверьте журнал Application на наличие парных исключений .NET Runtime:
# Получение деталей необработанного исключения из журнала приложений:
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='.NET Runtime'} -MaxEvents 3 | Format-List Message- Обновите или переустановите модули среды выполнения ASP.NET Core Hosting Bundle: если сайт работает на modern .NET, переустановите последний стабильный Hosting Bundle с официального сайта Microsoft.
Совет разработчику: Оберните критические участки вызова внешних DLL (P/Invoke) и фоновые потоки Task.Run в блоки try-catch, так как любое неперехваченное исключение в фоновом потоке мгновенно уничтожает весь процесс w3wp.exe.
Частые вопросы (FAQ)
Что означает код выхода 0xc0000005 в тексте события?
Это ошибка нарушения прав доступа к памяти (Access Violation), когда неуправляемый C++ код пытается прочитать или записать данные в невыделенную область памяти.
Что означает код выхода 0xe0434352?
Это стандартный шестнадцатеричный код любого необработанного исключения среды выполнения .NET CLR (Common Language Runtime).
Как проанализировать созданный .dmp файл?
Откройте дамп в бесплатной утилите WinDbg (из Windows SDK) и выполните команду: !analyze -v.
Как предотвратить потерю корзин пользователей при падении w3wp?
Перенесите хранение сессий из оперативной памяти InProc во внешний распределенный сервис — Redis или SQL Server Session State.