Как определить, какие дескрипторы открыты в этом процессе?

Я работаю над отладкой проблемы с одним из наших серверных процессов, который потребляет большое количество дескрипторов в течение 60-90 дней. Родительский процесс сервера порождает и циклически повторяет несколько дочерних процессов, причем каждый дочерний процесс перезапускается примерно раз в час. Количество дескрипторов родительского процесса возрастет до 40 000 с лишним в течение двух месяцев, но я не уверен, на что именно ссылаются дескрипторы.

Используя ProcessExplorer, я вижу количество дескрипторов и количество дескрипторов в списке (изображение ниже является примером). Однако количество перечисленных дескрипторов не приближается к числу 40 000, показанному на верхней панели. У меня есть около ~ 100 записей в окне дескрипторов, и, просматривая их свойства, я могу учесть около 3 тыс. Всего дескрипторов с этим окном, что далеко от 40 тыс. Всего.

Я установил родительский цикл на цикл своих дочерних элементов каждые несколько минут, чтобы попытаться выяснить, имеет ли он какое-то отношение к циклическим дочерним элементам, но мониторинг в течение часа, похоже, не привел к увеличению числа дескрипторов родительского процесса. В течение этого периода он будет двигаться вверх и вниз, но не в восходящем тренде. По общему признанию, час далеко от двух месяцев, но это начало.

Я был бы очень признателен за некоторые указания о том, как я могу устранить эту проблему в дальнейшем. К сожалению, это выходит за рамки моих общих знаний, поэтому я немного растерялся. Мы будем очень признательны за любую помощь в определении того, что может включать в себя этот счетчик дескрипторов.

введите здесь описание изображения

Обновление: на основании рекомендации josh poley ниже я использовал handle.exe из Sysinternals для изучения процесса. Используя флаг -a, я получил только 5 результатов. Итак, затем я попробовал флаг -s, в котором указано количество дескрипторов во всех процессах. Я запустил его один раз, затем перезапустил затронутые серверы и снова запустил его. Категория ручки Mutant резко упала, что заставляет меня думать, что мне нужно сосредоточиться на ней. Будут исследования

введите здесь описание изображения


person Tyler Lee    schedule 14.10.2015    source источник
comment
Случайный снимок в темноте: при работе с порождаемыми дочерними элементами и утечками дескрипторов типичная проблема заключается в том, что не закрываются два дескриптора, предоставленные CreateProcess в lpProcessInformation, возможно, взгляните на это.   -  person Matteo Italia    schedule 14.10.2015


Ответы (1)


Представление дескриптора в Process Explorer не показывает все возможные типы дескрипторов (только те, которые обычно необходимы и могут предоставить полезную информацию).

Вы должны использовать handle.exe (также из набора sysinternals) с опцией -a в сочетании с идентификатором вашего процесса, а затем проанализировать вывод. Пример:

handle.exe -a -p 26916 >handle.out

Просто выбрав случайный процесс на моем компьютере, handle.exe показывает 795 дескрипторов EtwRegistration, которые не отображаются в графическом интерфейсе Process Explorer.

person josh poley    schedule 14.10.2015
comment
Итак, я взглянул на handle.exe, и с помощью параметра -a я получил только 5 строк вывода для своего процесса. Однако, используя опцию -s, я получил количество всех дескрипторов во всех процессах. Я перезапустил свои службы и снова запустил их, и оказалось, что тип дескриптора — Mutant, это моя проблема. Я буду исследовать это дальше. - person Tyler Lee; 14.10.2015