Как решить проблему утечки в C # Windows Service - PullRequest
5 голосов
/ 10 января 2012

У меня есть служба Windows .NET 4, написанная на C #, работающая на Windows Server 2008, которая при мониторинге с PerfMon, по-видимому, потребляет 2500 дескрипторов в час. Счетчик «Handle Count» поднимается вверх.

Когда я смотрю на дескрипторы, используя ProcExp с выбранным параметром «Показать безымянные дескрипторы и сопоставления», в списке появляются тысячи дескрипторов событий и семафоров. Большинство кажется безымянным. Я посмотрел в исходном коде, и нет явного использования AutoResetEvent или ManualResetEvent.

Счетчик Private Bytes поднимается и падает. Я не наблюдал за процессом более пары часов, но оставлю его на ночь.

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

Можно ли найти один из маркеров и выяснить, на что он указывает и / или что может его "владеть"? Если так, то как?

В ответ на комментарии приведено краткое описание того, что делает служба.

  • размещает некоторые службы WCF
  • содержит экземпляр планировщика Quartz.NET
  • размещает очередь рабочих элементов (кварцевые задания помещают рабочие элементы в очередь, а не выполняют длительную работу сами)
  • размещает исполнителя рабочих элементов (рабочие элементы снимаются с очереди по таймеру и выполняются вне Кварца)
  • содержит собственный менеджер кэша (который выполняет большую часть работы ADO.NET)

1 Ответ

1 голос
/ 17 января 2012

Фундаментальная концепция устранения неисправностей - изоляция.Изоляция с точки зрения процессов и состояния.

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

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

...