(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?
Tags debugging iis worker-process