Event ID 50004 WAS: превышен лимит физической памяти пула IIS
Симптомы рециркуляции по лимиту выделенной памяти
В системном журнале System фиксируется предупреждение: Event ID 50004: A worker process serving application pool '[Имя_Пула]' requested a recycle because it reached its private memory limit от источника WAS.
| Симптом | Проявление |
|---|---|
| Регулярный перезапуск пула под нагрузкой | Процесс w3wp.exe утилизирует выделенный порог памяти и принудительно перезапускается |
| Сброс состояния пользовательских корзин/форм | Потеря сессий у посетителей сайта в момент перезапуска |
| Рост потребления RAM на сервере | После рециркуляции потребление RAM падает, затем снова линейно возрастает |
Пошаговое решение и настройка Private Memory (Event ID 50004)
- Скорректируйте лимит выделенной памяти (Private Memory Limit) в соответствии с объемом RAM сервера:
# Увеличение лимита выделенной памяти (Private Memory) до 4 ГБ (4194304 КБ):
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set apppool /apppool.name:"ИмяПула" /recycling.periodicRestart.privateMemory:4194304
# Либо полное отключение лимита (значение 0):
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set apppool /apppool.name:"ИмяПула" /recycling.periodicRestart.privateMemory:0- Найдите причину утечки памяти с помощью счетчиков производительности:
# Мониторинг выделенной памяти пулов IIS в реальном времени:
Get-Counter '\Process(w3wp*)\Private Bytes' -SampleInterval 2 -MaxSamples 5 | ForEach-Object {
$_.CounterSamples | Select-Object InstanceName, @{N="PrivateMemory_MB";E={[math]::Round($_.CookedValue/1MB,2)}}
}- Настройте профили сборщика мусора .NET Garbage Collector: если веб-приложение работает на многопроцессорном сервере, убедитесь, что в
aspnet.configилиruntimeconfig.jsonвключен серверный режим GC:
# Добавьте в конфигурационный файл приложения web.config в раздел :
#
#
#
# Совет разработчикам: Если объем памяти w3wp.exe растет непрерывно и не освобождается сборщиком мусора, снимите дамп памяти через ProcDump -ma и откройте его в dotMemory или Visual Studio для поиска неутилизированных статических коллекций.
Частые вопросы (FAQ)
Является ли Event ID 50004 критической ошибкой?
Нет, это штатный механизм защиты сервера от полного исчерпания оперативной памяти отдельным «прожорливым» пулом приложений.
Какой объем Private Memory рекомендуется устанавливать для пула IIS?
Для небольших сайтов достаточно 1–2 ГБ (1048576–2097152 КБ). Для высоконагруженных ERP/CRM систем лимит устанавливают от 4 до 8 ГБ, либо отключают (0), если сервер имеет достаточный запас RAM.
Что происходит с входящими запросами во время рециркуляции пула?
Запросы не теряются: они временно буферизуются в очереди драйвера HTTP.sys ядра Windows до момента готовности нового процесса w3wp.exe.
В каких единицах задается параметр privateMemory в IIS?
Параметр privateMemory задается в килобайтах (КБ). Например, 1048576 КБ = 1 ГБ.