Что является причиной того, что системный процесс продолжает накапливать дескрипторы

У меня есть сервер, который накапливает дескрипторы на системном процессе aka c:\windows\system32\ntoskrnl.exe. Ручки доходят до 18 000 за один день и продолжают расти с такой скоростью. На сервере работает Postgresql 9.0.3, веб-службы asp.net, которые вставляются в базу данных, и веб-сайт asp.net, который запрашивает базу данных. Доступ к веб-сервисам осуществляется с компьютеров тестирования Linux и Windows через gSOAP. Я запустил Process Explorer в системном процессе, и дополнительные дескрипторы перечислены как Type Key. Я нашел их в реестре. Вот два примера, экспортированных из regedit.

1.

Key Name:          HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{2e167ea7-    85e3-4395-995a-77af9875d79a}\InprocServer32
Class Name:        <NO CLASS>
Last Write Time:   7/13/2009 - 10:53 PM
Value 0
  Name:            <NO NAME>
  Type:            REG_EXPAND_SZ
  Data:            %systemroot%\system32\colbact.dll

Value 1
  Name:            ThreadingModel
  Type:            REG_SZ
  Data:            Both

2.

Key Name:          HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{91162401-6E6B-478A-A7FF-994EBA35B9C3}
Class Name:        <NO CLASS>
Last Write Time:   7/13/2009 - 10:54 PM
Value 0
  Name:            <NO NAME>
  Type:            REG_SZ
  Data:            PSFactoryBuffer


Key Name:          HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{91162401-6E6B-478A-A7FF-994EBA35B9C3}\InProcServer32
Class Name:        <NO CLASS>
Last Write Time:   7/13/2009 - 10:54 PM
Value 0
  Name:            <NO NAME>
  Type:            REG_EXPAND_SZ
  Data:            %SystemRoot%\system32\ime\shared\imeapis.dll

Value 1
  Name:            ThreadingModel
  Type:            REG_SZ
  Data:            Both

Веб-сервис, который вставляется в базу данных, выполняется около 130 000 раз в день в течение всего дня. Вставка состоит из виртуальной машины под управлением Windows или Linux в интрасети, вызывающей функцию веб-службы через gSOAP с данными результатов теста. Данные представляют собой строки и числа. Веб-сервис открывает соединение с базой данных, вставляет данные в базу данных и закрывает соединение. Размер рассматриваемой базы данных составляет 150 гигабайт. Я рассмотрел код использования базы данных, который, кстати, C#, и каждое соединение с базой данных закрывается, насколько я вижу. Функции сервера работают нормально, за исключением накопления дескриптора.

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

Что может быть причиной накопления ручки? Любая помощь будет принята с благодарностью. Благодарю.

1 ответ

Оказывается, утечка дескриптора произошла из-за драйвера в программе менеджера лицензий, созданной SaferNet Inc. AQTime программного обеспечения SmartBear использует этот менеджер лицензий, и вот как мы его получили. Я работаю со SmartBear, чтобы решить эту проблему.

Мне удалось точно определить открытия реестра, которые не были закрыты с помощью Process Monitor от Sysinternals. Затем я посмотрел на стек вызовов для рассматриваемых дескрипторов и увидел, что драйвер из SaferNet вызывает ntoskrnl.

В конце концов, проблема не имела ничего общего с IIS, gSOAP или postgresql.

Ребята из SmartBear предоставили новый менеджер лицензий. Я установил его поверх старого, и утечка прошла.

Другие вопросы по тегам