Recentemente, tivemos um problema em nosso servidor ativo que fez com que nosso aplicativo Web parasse de responder. Tudo o que estávamos recebendo eram erros 503 até reiniciarmos o servidor, então tudo estava bem. Eventualmente, rastreei o arquivo até o activationperr.log e encontrei muitos erros 1_Connections_Refused.
Investigações posteriores pareciam indicar que atingimos o limite de pool não paginado. Desde então, monitoramos a memória de pool não paginado usando Poolmon.exe e acreditamos ter identificado a tag que está causando o problema.
Tag Type Allocs Frees Diff Bytes Per Alloc
Even Nonp 51,231,806 50,633,533 684,922 32,878,688 48
Se usarmos poolmon.exe / g, ele exibirá o driver mapeado como [<unknown> Event objects].
Isso praticamente não ajuda em nada. Minha equipe passou um tempo considerável pesquisando esse problema e não conseguiu encontrar um processo para reduzi-lo a um aplicativo ou serviço específico. Tenho a sensação de que a maioria das pessoas parece resolver o problema matando processos na máquina até ver a memória não paginada sendo redefinida. Não é exatamente isso que você deseja ver ao trabalhar em uma máquina de produção.
Se eu abrir o Gerenciador de tarefas e visualizar a lista de processos. Vejo MailService.exe com um valor de NP Pool de 105K, este é 36K maior que o valor do processo listado em segundo. Como tivemos alguns problemas com nosso servidor de email no passado (que podem ou não estar relacionados a esse problema), meu pressentimento é que isso está causando o problema.
No entanto, antes de reiniciarmos os serviços, eu gostaria de ter um pouco mais de certeza do que apenas um "pressentimento".
Eu também tentei usar poolmon.exe / c, mas isso sempre retorna o erro:
unable to load msvcr70.dll/msvcp70.dll
e não cria localtag.txt. Meu colega precisou baixar o pooltag.txt da Internet porque não conseguimos descobrir onde ele está localizado. Não temos o depurador do win ou o DDK do win instalado (que eu posso ver). Talvez o erro acima tenha sido dado porque não temos nenhum deles instalado - mas eu não sei.
Finalmente tentei:
C:\windows\system32\driver\findstr /m /l Even *.sys
Isso retornou uma lista bastante considerável de arquivos .sys e novamente não ajudou em nada com o problema em questão.
Portanto, minha pergunta é a seguinte: existe outra maneira de diminuir a causa desse vazamento de memória?
ATUALIZAR:
Conforme sugerido abaixo, registrei os bytes não agrupados do pool nos últimos dias para verificar se há algum processo em alta. Na maior parte dos casos, todos os processos parecem bastante estáticos em seu uso. Dois deles parecem ter aumentado um pouco. Continuarei monitorando isso pelos próximos dias.
Também esqueci de mencionar anteriormente que nenhum dos processos parece estar usando um número excessivo de identificadores também.
ATUALIZAÇÃO 2:
Eu tenho monitorado isso nas últimas duas semanas. O pool de bytes não paginados para processos individuais e o conjunto total de bytes não paginados permaneceram relativamente estáveis durante esse período. Durante esse período, o Windows foi atualizado e o servidor foi reiniciado, por isso estou pensando se isso resolveu o problema. Definitivamente, não estou vendo o crescimento consistente no pool de bytes não paginados agora que estava antes disso.