Obtendo um despejo de memória de um processo de trabalho IIS ASP.NET morrendo

2

(Não tenho certeza se isso é um problema do IIS ou não, por isso, se isso é mais adequado para SO, eu vou com alegria movê-lo ...)

Nós temos um aplicativo hospedado no IIS que está esporadicamente morrendo, e os logs de eventos afirmam que o pool de aplicativos está se reportando como não-íntegro devido a deadlocks. Estou tentando obter um despejo do processo enquanto ele está morrendo, para ver se conseguimos identificar o problema.

Eu tenho seguido este artigo da Base de Conhecimento Microsoft 828222 , que diz que há uma opção no aplicativo pool para permitir a análise "Processo de trabalhador órfão". Seguimos exatamente essas etapas: instalamos as ferramentas do depurador, ativamos a opção Processo de trabalho órfão para o pool de aplicativos e configuramos um arquivo de lote para ser executado quando acontece:

adsutil.vbs SET W3SVC/AppPools/MyAppPool/OrphanWorkerProcess TRUE
adsutil.vbs SET W3SVC/AppPools/MyAppPool/OrphanActionExe "c:\debug\dump.cmd"
adsutil.vbs SET W3SVC/AppPools/MyAppPool/OrphanActionParams "%1%" 

O debugdump.cmd essencialmente executa cdb no PID do processo de morrer (depois de computar um nome de arquivo exclusivo):

c:\debug\cdb.exe -c ".dump /o /ma %FILENAME%;q" -p %1

O lado IIS da configuração parece estar correto - ele tenta executar o arquivo em lote no processo de morte. Mas na verdade não faz nada, porque de acordo com cdb :

Cannot debug pid 3236, NTSTATUS 0xC000010A
    "An attempt was made to access an exiting process."

O ponto principal desta opção, presumo, era que o IIS não matasse o processo antes que o depurador tivesse a chance de descartá-lo; eu senti falta de algo na configuração?

    
por KutuluMike 27.04.2016 / 18:03

0 respostas