Лечим утечку дескрипторов в службе Application Management
Ранее описал решение, позволяющее разделить службы, функционирующие в XP в рамках одного процесса (svchost.exe). В результате обнаружил службу, в которой периодически (достаточно бессистемно) возникают утечки дескрипторов, в результате чего уже после недели работы без перезагрузки начинаются проблемы. “Вылечим” симптомы, выделив Application Management service в отдельный процесс.
Выделим службу в отдельный процесс:
import-module '.\ITG.Wrapper\ITG.Wrapper' # -force import-module '.\ITG.SvcHostManagement\ITG.SvcHostManagement' # -force Enter-ITGScript -activity 'Выделяем под службу Application Management отдельный экземпляр svchost.exe'; $ErrorActionPreference = 'Stop' trap { Write-CurrentException($_); } 'AppMgmt' | Set-ServiceOwnProcess; Exit-ITGScript;
Для сценария использовали ранее описанный модуль ITG.SvcHostManagement. По сути, значимой является только одна строка, остальные – для того, чтобы оставить следы в журнале событий.
После проделанных манипуляций при перезапуске службы Application Management будет перезапускаться и её процесс (она же одна в процессе). Поэтому для лечения симптомов утечки дескрипторов в этой службе достаточно через политику создать назначенное задание, которое раз в сутки будет перезапускать службу:
net stop AppMgmt net start AppMgmt
Приведённый первым сценарий проще всего запускать как startup script через GPO. Такие вот несложные манипуляции позволяют нам не решить, но обойти последствия проблемы с утечкой дескрипторов в службе Application Management.
P.S. Как Вы понимаете, это решение можно применить и для любой другой службы, использующей в качестве процесса svchost.exe.
Отзывы » (7)
RSS комментарии
Обратная ссылка
Глянул у себя в домене: У меня для этой службы («Управление приложениями») тип запуска по дефолту — «вручную» и она, соответственно, не запущена. А почему у вас она работает?
ЗЫ Впрочем и процессов WISPTIS.EXE (о которых вы вели речь ранее) у меня так же не наблюдается.
Почему?
WISPTIS.EXE — «рукописный ввод». Устанавливается такими продуктами, как MS Office (не всеми редакциями), Adobe Acrobat Reader и не только. Болезнь его широко известна. Есть и «патч», но он доступен только по запросу в MS. На мой запрос всё ещё не ответили.
Касательно Application Management. Эта служба отвечает за реализацию компонента GPO «Управление приложениями». То есть именно она ответственна за применение сценариев публикации продуктов через GPO, удаления и так далее. Замечу — ошибок при установки ПО через GPO сейчас у меня нет, но эпизодически служба остаётся активной и наблюдается утечка дескрипторов. При этом в журналах — всё «в ажуре» (не в облаках windows azure, а «всё хорошо», в смысле), в логах microsoft installer — так же. Причина осталась для меня загадкой, нашёл пока такое вот обходное решение.
Уже который раз Akismet режет «не спам»… Необходимо искать ему альтернативу, думается мне.
Не, Аксимет все правильно делает, а вот авторизация по OpenID (через мой блог) почему-то не прошла.
OpenID Authentication Error: We were unable to authenticate your claimed OpenID, however you can continue to post your comment without OpenID:
Однако, я через Яндекс у себя авторизовался. Этот комментарий оставлен через open-id http://sergey-s-betke.ya.ru.
Сергей, и все таки, как решить эту проблему в Windows — запускать сервис со своим приоритетом?
Спасибо за описание разделения сервисов по своим процессам — но вот приоритет как при этом задать?
Пока с приоритетом под XP есть некоторые сложности. Нашёл только сторонние продукты, которые решают эту проблему. Либо же приходит в голову мысль следующая: создать сервис средствами powershell (уже писал, как это сделать), которые будет на момент запуска просканирует запущенные службы и проставит для их процессов те приоритеты, что мы «закажем». А также наш сервис должен подписаться на событие запуска службы (через WMI), чтобы установить для её процесса необходимый приоритет. Пока по мере возможности (а времени просто нет) прорабатываю именно такое решение.