Obtendo despejos de memória do processo de trabalho do IIS
-
09-06-2019 - |
Pergunta
Estou fazendo algo ruim no meu aplicativo ASP.NET.Pode ser qualquer número de bibliotecas CTP que estou usando ou simplesmente não estou descartando algo corretamente.Mas quando reimplanto meu ASP.NET na instalação do Vista IIS7 ou na instalação do IIS6 do meu servidor, travo um processo de trabalho do IIS.
Limitei o problema ao meu rastreador HTTP, que é uma fera multithread que rastreia sites em busca de informações úteis quando solicitado.Depois de iniciar um rastreador e reimplantar o aplicativo por cima, em vez de descarregar normalmente o appDomain e recarregar, um processo de trabalho do IIS falhará (aparecendo uma mensagem de falha) e continuará recarregando o domínio do aplicativo.
Quando essa falha ocorrer, onde posso encontrar o despejo de memória para análise?
Solução
Baixe ferramentas de depuração para Windows:http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx
As Ferramentas de Depuração para Windows possuem um script (ADPLUS) que permite criar dumps quando um processo TRAVA:http://support.microsoft.com/kb/286350
O comando deve ser algo como (se você estiver usando IIS6):
cscript adplus.vbs -crash -pn w3wp.exe
Este comando anexará o depurador ao processo de trabalho.Quando a falha ocorrer, um dump será gerado (um arquivo *.DMP).
Você pode abri-lo no WinDBG (também incluído nas Ferramentas de depuração para Windows).Arquivo > Abrir despejo de memória...
Por padrão, o WinDBG mostrará (ao lado da linha de comando) o thread onde o processo travou.
A primeira coisa que você precisa fazer no WinDBG é carregar as extensões do .NET Framework:
.loadby sos mscorwks
então, você exibirá a pilha de chamadas gerenciada:
!clrstack
se o thread não estava executando código gerenciado, você precisará verificar a pilha nativa:
kpn 200
Isso deve lhe dar algumas idéias.Para continuar a solução de problemas, recomendo que você leia o seguinte artigo:
Outras dicas
Uma pesquisa rápida encontrada Estado IISS - depende do Ferramentas de depuração do Windows e precisa estar em execução quando ocorrer uma falha, mas dadas as circunstâncias que você descreveu, isso não deve ser um problema,
Você também pode usar DebugDiag para isso
Uma ótima explicação pode ser encontrada aqui:
http://blogs.msdn.com/b/tess/archive/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.aspx