Что является причиной того, что системный процесс продолжает накапливать дескрипторы
У меня есть сервер, который накапливает дескрипторы на системном процессе 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 предоставили новый менеджер лицензий. Я установил его поверх старого, и утечка прошла.