Event ID 50003 WAS: лимит виртуальной памяти пула приложений исчерпан
Симптомы рециркуляции по лимиту виртуальной памяти
В системном журнале System фиксируется предупреждение Event ID 50003: A worker process serving application pool '[Имя_Пула]' requested a recycle because it reached its virtual memory limit от источника WAS.
| Симптом | Последствия |
|---|---|
| Внезапная перезагрузка рабочего процесса w3wp.exe | Обрыв текущих транзакций и файловых загрузок клиентов |
| Рост использования виртуальной памяти процесса | Размер зарезервированной виртуальной памяти (Virtual Bytes) превысил заданное число КБ |
| Сброс данных кэша сайта | Временное падение производительности при повторном наполнении кэша |
Пошаговое устранение сбоя Event ID 50003
Ограничение по виртуальной памяти (Virtual Memory Limit) является устаревшим механизмом, созданным для 32-разрядных систем. В современных 64-битных операционных системах установка этого лимита приводит к ложным срабатываниям, так как приложения .NET резервируют большие виртуальные адресные пространства без фактического расхода физической памяти RAM.
- Отключите лимит виртуальной памяти (установите в 0):
# Полное отключение лимита виртуальной памяти для конкретного пула (PowerShell):
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set apppool /apppool.name:"ИмяПула" /recycling.periodicRestart.memory:0- Отключите лимит виртуальной памяти глобально для всех пулов сервера:
# Сброс лимита Virtual Memory в параметрах по умолчанию для IIS:
& "$env:SystemRoot\System32\inetsrv\appcmd.exe" set config -section:system.applicationHost/applicationPools /applicationPoolDefaults.recycling.periodicRestart.memory:0 /commit:apphost- Проверьте фактическое потребление оперативной памяти процессом w3wp.exe:
# Мониторинг реальной физической (WorkingSet) и виртуальной (PrivateBytes) памяти IIS:
Get-Process w3wp | Select-Object Id, ProcessName, @{Name="WorkingSet_MB";Expression={[math]::round($_.WorkingSet64/1MB,2)}}, @{Name="VirtualMemory_MB";Expression={[math]::round($_.VirtualMemorySize64/1MB,2)}}Важно: Рекомендуется ограничивать только Private Memory Limit (выделенную физическую память), если требуется сдерживать утечки памяти, а значение Virtual Memory Limit всегда оставлять равным 0 (Disabled).
Частые вопросы (FAQ)
В чем разница между Virtual Memory Limit и Private Memory Limit в IIS?
Virtual Memory — это общий объем виртуального адресного пространства, которое процесс зарезервировал в ОС. Private Memory — это фактический объем оперативной памяти, выделенный только данному процессу w3wp.exe.
Почему для 64-битных систем лимит виртуальной памяти не имеет смысла?
64-разрядные процессы имеют практически неограниченное адресное пространство (128 ТБ). Среда .NET CLR может зарезервировать гигабайты виртуальных страниц под кучу GC, не используя реальную RAM.
Где настроить эти ограничения в IIS Manager?
В оснастке 'Диспетчер служб IIS' откройте 'Пулы приложений' -> выберите пул -> 'Дополнительные параметры' -> раздел 'Переработка' -> установите 'Лимит виртуальной памяти (КБ)' в 0.
Какое значение по умолчанию имеет лимит виртуальной памяти в новых версиях IIS?
По умолчанию в современных версиях IIS этот параметр всегда установлен в 0 (отключен).