(Не уверен, что это проблема IIS или нет, поэтому, если это лучше подходит для ТАК, я с радостью перенесу его ...)
У нас есть приложение, размещенное в IIS, которое время от времени умирает, а в журналах событий утверждается, что пул приложений сообщает о себе как о неработоспособном из-за взаимоблокировок. Я пытаюсь получить аварийный дамп процесса, когда он умирает, чтобы посмотреть, сможем ли мы определить проблему.
Я слежу за этим Статья базы знаний Майкрософт № 828222, в котором говорится, что в пуле приложений есть опция для включения анализа «потерянных рабочих процессов». Мы точно выполнили эти шаги - установили инструменты отладчика, включили опцию Orphaned Worker Process для пула приложений и настроили командный файл для запуска, когда это произойдет:
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%"
В debugdump.cmd
по сути просто работает cdb
на PID умирающего процесса (после вычисления уникального имени файла):
c:\debug\cdb.exe -c ".dump /o /ma %FILENAME%;q" -p %1
Сторона конфигурации IIS кажется чтобы быть правильным - он пытается запустить командный файл на умирающем процессе. Но на самом деле он ничего не делает, потому что, согласно cdb
:
Cannot debug pid 3236, NTSTATUS 0xC000010A
"An attempt was made to access an exiting process."
Я предполагал, что весь смысл этого варианта в том, что IIS будет не убить процесс до того, как отладчик успеет сбросить его; я что-то пропустил в конфигурации?