Статья размещена автором Бетке Сергей Сергеевич

Лечим утечку дескрипторов в службе 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)

  1. shs:

    Глянул у себя в домене: У меня для этой службы («Управление приложениями») тип запуска по дефолту — «вручную» и она, соответственно, не запущена. А почему у вас она работает?

    ЗЫ Впрочем и процессов WISPTIS.EXE (о которых вы вели речь ранее) у меня так же не наблюдается.
    Почему?

    • WISPTIS.EXE — «рукописный ввод». Устанавливается такими продуктами, как MS Office (не всеми редакциями), Adobe Acrobat Reader и не только. Болезнь его широко известна. Есть и «патч», но он доступен только по запросу в MS. На мой запрос всё ещё не ответили.
      Касательно Application Management. Эта служба отвечает за реализацию компонента GPO «Управление приложениями». То есть именно она ответственна за применение сценариев публикации продуктов через GPO, удаления и так далее. Замечу — ошибок при установки ПО через GPO сейчас у меня нет, но эпизодически служба остаётся активной и наблюдается утечка дескрипторов. При этом в журналах — всё «в ажуре» (не в облаках windows azure, а «всё хорошо», в смысле), в логах microsoft installer — так же. Причина осталась для меня загадкой, нашёл пока такое вот обходное решение.

    • Уже который раз Akismet режет «не спам»… Необходимо искать ему альтернативу, думается мне.

  2. Борис:

    Сергей, и все таки, как решить эту проблему в Windows — запускать сервис со своим приоритетом?
    Спасибо за описание разделения сервисов по своим процессам — но вот приоритет как при этом задать?

    • Пока с приоритетом под XP есть некоторые сложности. Нашёл только сторонние продукты, которые решают эту проблему. Либо же приходит в голову мысль следующая: создать сервис средствами powershell (уже писал, как это сделать), которые будет на момент запуска просканирует запущенные службы и проставит для их процессов те приоритеты, что мы «закажем». А также наш сервис должен подписаться на событие запуска службы (через WMI), чтобы установить для её процесса необходимый приоритет. Пока по мере возможности (а времени просто нет) прорабатываю именно такое решение.

Опубликовать комментарий

XHTML: Вы можете использовать следующие HTML теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Tags Связь с комментариями статьи:
RSS комментарии
Обратная ссылка