O Caso da Página ASP.NET Extremamente Lenta

O cliente estava enfrentando um problema de lentidão em um dos seus sites. Os usuários não conseguiam navegar entre as páginas alegando que a página ficava “em branco” e depois gerava timeout.

Coletamos um DUMP no momento da lentidão para analisarmos a causa da lentidão.

Comandos Executados

.load psscor2

Esse comando é utilizado para carregar a extensão de depuração de código gerenciado Psscor2 que é utilizada para ajudar no diagnóstico de problemas em aplicações do Framework .Net, para as versões 2.0, 3.0 e 3.5.

!threadpool

No momento em que o DUMP foi coletado a quantidade de threads em execução era superior a metade do valor limite do pool de threads.

Através do resultado é possível verificar que o problema de desempenho não é decorrente do consumo de processamento.

 !eestack –ee 

 Esse comando permite investigar o callstack das threads gerenciadas. Observe que a maioria das threads estavam executando os seguintes métodos:

Praticamente todas as threads estavam executando os mesmos métodos.

kb

Através desse commando é possível analisar a pilha de chamadas não gerenciada dessas threads.

 

 

Observe que o callstack da thread acima mostra que ela está bloqueada por outra thread. O mesmo ocorre para a maioria das outras threads.

 !syncblk

A figura abaixo mostra que a thread 156 está bloqueando (lock) as demais threads (348 no total).

 

 

A análise do callstack da thread 156 mostra que a ferramenta CA Wily Introscope é quem está controlando essa thread e não está liberando o LOCK.

O problema foi resolvido desativando o serviço CA Wily Introscope.