2015-10-14 7 views
2

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

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

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

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

enter image description here

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

enter image description here

+0

Случайный снимок в темноте: когда речь идет о нерестах детей и обтекающих ручках, типичная проблема заключается не в закрытии двух обработанных, предоставляемых CreateProcess в lpProcessInformation, может быть, взгляните на нее. –

ответ

3

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

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

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

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

+0

Итак, я взглянул на handle.exe, и с помощью опции -a я получил только 5 строк вывода для моего процесса. Однако, используя опцию -s, я получил количество всех ручек во всех процессах. Я перезапустил свои службы и снова запустил его, и похоже, что тип дескриптора - это Mutant, это моя проблема. Я буду исследовать это еще раз. –