O que está causando o ntoskrnl, também conhecido como o processo System, para continuar acumulando handles

3

Eu tenho um servidor que está acumulando alças no processo do sistema, também conhecido como c: \ windows \ system32 \ ntoskrnl.exe. As alças vão para 18.000 em um dia e continuam indo para sempre a essa taxa. O servidor está executando o Postgresql 9.0.3, serviços da Web asp.net que são inseridos no banco de dados e um site asp.net que consulta o banco de dados. Os serviços da web são acessados a partir de máquinas de teste do linux e do windows via gSOAP. Eu corri Process Explorer no processo do sistema e as alças extras são listadas como chave de tipo. Eu os encontrei no regiedt. Aqui estão dois exemplos exportados do 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

O serviço da web que é inserido no banco de dados é executado cerca de 130.000 vezes por dia durante todo o dia. Uma inserção consiste em uma máquina virtual executando windows ou linux na intranet chamando a função web service via gSOAP com os dados do resultado do teste. Os dados são cadeias e números. O serviço da Web abre uma conexão de banco de dados, insere os dados no banco de dados e fecha a conexão. O banco de dados em questão é de 150 gigabytes grandes. Eu passei por cima do código de uso do banco de dados, que é C # pelo caminho e cada conexão de banco de dados está sendo fechada, tanto quanto eu posso ver. As funções do servidor funcionam bem, exceto pelo acúmulo de identificadores.

Quando as alças chegam a cerca de 150.000, o site começa a se comportar de maneira estranha e eu tenho que reinicializar, o que é problemático, porque as máquinas de teste estão bombardeando o serviço da web com resultados de testes.

O que poderia estar causando o acúmulo de identificadores? Qualquer ajuda seria muito apreciada. Obrigado.

    
por Adam Bruss 25.01.2012 / 20:26

1 resposta

2

Acontece que o vazamento de identificador veio de um driver em um programa gerenciador de licenças feito pela SaferNet Inc. A AQTime do software SmartBear usa esse gerenciador de licenças e foi assim que conseguimos. Estou trabalhando com o SmartBear para lidar com o problema.

Consegui identificar as aberturas de registro que não estavam sendo fechadas usando o Process Monitor da Sysinternals. Então eu olhei para a pilha de chamadas para as alças em questão e vi o driver da SaferNet invocando o ntoskrnl.

No final, o problema não tem nada a ver com o IIS, gSOAP ou postgresql.

Os caras da SmartBear forneceram um novo gerenciador de licenças. Eu instalei sobre o antigo e o vazamento foi embora.

    
por 02.03.2012 / 21:04