Event ID 5008 WAS: рабочий процесс пула запросил рециркуляцию
Симптомы события рециркуляции (Event ID 5008)
В системном журнале периодически фиксируется информационное или предупреждающее событие: Event ID 5008: A worker process serving application pool '[Имя_пула]' has requested a recycle because it reached its private bytes / virtual memory limit or scheduled time.
| Симптом | Последствия |
|---|---|
| Сброс пользовательских сессий | Пользователи сайта внезапно теряют авторизацию и несохраненные данные корзин |
| Периодические кратковременные задержки | Сайт «подтормаживает» при прогреве кэша (Cold Start) после перезапуска процесса |
| Высокая нагрузка на CPU | Частая перекомпиляция представлений и инициализация .NET Framework |
Диагностика и настройка рециркуляции (Event ID 5008)
Событие 5008 указывает на то, что процесс выполнил условие правила перезапуска, заданного в IIS. Ниже описано, как выяснить точную причину и скорректировать лимиты.
- Включите расширенное логирование причин рециркуляции:
# Включение записи всех событий рециркуляции в журнал событий:
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set config -section:system.applicationHost/applicationPools /applicationPoolDefaults.recycling.logEventOnRecycle:"Time,Requests,Schedule,Memory,IsapiUnhealthy,OnDemand,ConfigChange,PrivateMemory" /commit:apphost- Скорректируйте лимит выделенной памяти (Private Memory Limit): если вашему приложению требуется больше памяти:
# Увеличение лимита Private Memory до 4 ГБ (4194304 КБ) или отключение (0):
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set apppool /apppool.name:"ИмяПула" /recycling.periodicRestart.privateMemory:4194304- Отключите стандартный периодический перезапуск каждые 1740 минут: по умолчанию IIS перезапускает пулы каждые 29 часов, что может происходить в разгар рабочего дня:
# Отключение периодического перезапуска по таймеру (установка в 0):
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set apppool /apppool.name:"ИмяПула" /recycling.periodicRestart.time:00:00:00
# Задание точного ночного времени перезапуска (например, в 03:30 ночи):
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set apppool /apppool.name:"ИмяПула" /+recycling.periodicRestart.schedule.[value='03:30:00']Совет: Если ваше приложение хранит сессии в памяти процесса (In-Proc Session State), настройте сервер состояний ASP.NET State Service или Redis Distributed Cache, чтобы пользователи не теряли сессию при рециркуляции.
Частые вопросы (FAQ)
Опасно ли появление Event ID 5008?
Нет, это штатное событие управления жизненным циклом IIS. Однако если оно появляется каждые несколько минут — в приложении есть утечка памяти или занижены лимиты.
Почему IIS по умолчанию перезапускает пулы раз в 1740 минут (29 часов)?
Число 1740 выбрано разработчиками Microsoft специально, чтобы время перезапуска смещалось каждый день и не выпадало постоянно на одно и то же рабочее время.
Что такое 'Idle Time-out' (Тайм-аут простоя)?
Это время (по умолчанию 20 минут), после которого неактивный пул выгружается из памяти для экономии ресурсов сервера.
Как сделать так, чтобы пул приложений не засыпал никогда?
В дополнительных свойствах пула установите 'Тайм-аут простоя (минуты)' = 0 и 'Режим запуска' = AlwaysRunning.