У меня есть служба Windows .NET 4, написанная на C #, работающая на Windows Server 2008, которая при мониторинге с PerfMon, по-видимому, потребляет 2500 дескрипторов в час. Счетчик «Handle Count» поднимается вверх.
Когда я смотрю на дескрипторы, используя ProcExp с выбранным параметром «Показать безымянные дескрипторы и сопоставления», в списке появляются тысячи дескрипторов событий и семафоров. Большинство кажется безымянным. Я посмотрел в исходном коде, и нет явного использования AutoResetEvent или ManualResetEvent.
Счетчик Private Bytes поднимается и падает. Я не наблюдал за процессом более пары часов, но оставлю его на ночь.
Служба работает на удаленном сервере, поэтому я не могу напрямую подключить отладчик, и, вероятно, мне придется выполнить дамп процесса и проанализировать его с помощью WinDBG или подобного.
Можно ли найти один из маркеров и выяснить, на что он указывает и / или что может его "владеть"? Если так, то как?
В ответ на комментарии приведено краткое описание того, что делает служба.
- размещает некоторые службы WCF
- содержит экземпляр планировщика Quartz.NET
- размещает очередь рабочих элементов (кварцевые задания помещают рабочие элементы в очередь, а не выполняют длительную работу сами)
- размещает исполнителя рабочих элементов (рабочие элементы снимаются с очереди по таймеру и выполняются вне Кварца)
- содержит собственный менеджер кэша (который выполняет большую часть работы ADO.NET)