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.