Назад | Перейти на главную страницу

Получение аварийного дампа умирающего рабочего процесса IIS ASP.NET

(Не уверен, что это проблема 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 будет не убить процесс до того, как отладчик успеет сбросить его; я что-то пропустил в конфигурации?