wsus_logo

WSUS: частая перезагрузка IIS пула ‘WsusPool’ (Pool Recycling), зависания в процессе перезапуска. Event ID 5117, 5138, 5013

Пулы приложений (application pools) IIS могут периодически перезагружаться (pool recycling). Этот механизм предназначен для того, чтобы избежать нестабильной работы приложения. Рабочий процесс (Worker process) может запрашивать перезагрузку пула, когда он достигает определённых лимитов (время работы, количество запросов, использование памяти). Все настройки, конечно, зависят от конкретного приложения и сервера. Данная статья не призвана раскрыть всё это многообразие настроек. Здесь я опишу конкретную ситуацию со стандартным приложением WSUS. При установке роли WSUS, создаётся пул приложений IIS ‘WsusPool’ который имеет настройки не совсем приемлемые для больших нагрузок. В своей практике я время от времени сталкиваюсь с проблемами, связанными с нехваткой ресурсов для пула WsusPool, что приводит к нестабильной работе сервера или полному отказу в его работе. Часто возникают проблемы при синхронизации System Center Configuration Manager (SCCM) с сервером WSUS последний может полностью перестать работать. Журналы (Log files) работы сервера WSUS находятся в %ProgramFiles%\Update Services\LogFiles

Проблема:

Имеем частые запросы на перезапуск пула WsusPool (Pool Recycling) от рабочего процесса IIS в связи с достижением лимита памяти для пула. Об этом свидетельствует Event ID 5117: A worker process serving application pool ‘WsusPool’ has requested a recycle because it reached its private bytes memory limit.
Сам по себе процесс перезапуска пула (Pool Recycling) обычно не ведёт к прерыванию обслуживания, т.к. он выполняется так, что сначала запускается новый экземпляр рабочего процесса приложения, все запросы передаются на новый экземпляр и лишь потом выгружается старый экземпляр.
Event ID 5013 — зависание при попытке завершения процесса, обслуживающего пул. A process serving application pool ‘WsusPool’ exceeded time limits during shut down. The process id was ‘x’.
Event ID 5138 — рабочий процесс не смог остановить listener http за отведённое время. A worker process ‘x’ serving application pool ‘WsusPool’ failed to stop a listener channel for protocol ‘http’ in the allotted time.  The data field contains the error number.

Решение:

Первое, что нужно проверить — хватает ли ресурсов самому серверу (память, процессор). Если с этим явных проблем нет, то приступаем к настройке пула Wsus в консоли управления сервером IIS.
Приведу настройки для пула WsusPool по умолчанию для Windows Server 2012 R2:
WsusPool настройки пула IIS по умолчанию

Значения длины очереди Queue Length можно увеличить с 1000 до 2000 — 5 000.
Размер очереди — это количество запросов, которые драйвер Http.sys ставит в очередь для пула. Когда очередь переполняется, все новые запросы получают ошибку 503 «Service Unavailable». Имеет смысл изменить, когда пул получает слишком много одновременных запросов, например при синхронизации с SCCM сервером.
Увеличим размер выделяемой памяти (Private Memory Limit) с 1843200 Кб ~ 1.8 Гб до 4 Гб ~ 4194304 Кб и понаблюдаем за результатом, в течении дня.
Если значения выше стандартного не помогают, можно отключить это ограничение, прописав в параметр Private Memory Limit ноль ‘0’.

На одном из моих нагруженных WSUS серверов с отключенным ограничением по памяти IIS Worker Process потребляет около 5 Гб RAM:

После внесения изменений перезапускаем пул:

Поиграв с этими параметрами, можно подобрать оптимальные для вашей инфраструктуры значения. Естественно, в системе должно быть достаточно памяти для указываемых значений.

Добавить комментарий