Назад | Перейти на главную страницу

Что заставляет процесс ntoskrnl, также известный как System, продолжать накапливать дескрипторы

У меня есть сервер, который накапливает дескрипторы системного процесса, известного как c: \ windows \ system32 \ ntoskrnl.exe. Ручки доходят до 18000 за один день и продолжают расти с этой скоростью. На сервере работает Postgresql 9.0.3, веб-службы asp.net, которые вставляются в базу данных, и веб-сайт asp.net, который запрашивает базу данных. Доступ к веб-службам осуществляется с тестовых машин Linux и Windows через gSOAP. Я запустил Process Explorer для процесса System, и дополнительные дескрипторы перечислены как 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, веб-сайт начинает вести себя странно, и мне приходится перезагружаться, что является проблематичным, поскольку тестовые машины бомбардируют веб-службу результатами тестирования.

Что могло вызвать накопление дескриптора? Любая помощь будет принята с благодарностью. Спасибо.

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

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

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

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