Получение аварийных дампов рабочего процесса IIS
Я делаю что-то плохое в моем ASP.NET app. Это может быть любое количество библиотек CTP, которые я использую, или я просто не распоряжаюсь чем-то должным образом. Но когда я передислоцирую ASP.NET для установки Vista IIS7 или установки IIS6 моего сервера я сбой рабочего процесса IIS.
я сузил проблему до моего http-искателя, который является многопоточным зверем, который сканирует сайты для полезной информации, когда его просят. После запуска искателя и повторного развертывания приложения сверху, а не изящно выгружая appDomain и перезагружая, рабочий процесс IIS аварийно завершит работу (появится сообщение о сбое) и продолжит перезагрузку домена приложения.
когда произойдет этот сбой, где я могу найти аварийный дамп для анализа?
3 ответов
скачать инструменты отладки для Windows: http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx
Debugging Tools for Windows имеет скрипт (ADPLUS), который позволяет создавать дампы при сбое процесса: http://support.microsoft.com/kb/286350
команда должна быть чем-то вроде (Если вы используете IIS6):
cscript adplus.vbs -crash -pn w3wp.exe
эта команда присоединит отладчик к рабочему процессу. Когда произойдет сбой он будет генерировать дамп (a *.Файл DMP).
вы можете открыть его в WinDBG (также входит в инструменты отладки для Windows). Файл > открыть аварийный дамп...
по умолчанию WinDBG покажет вам (рядом с командной строкой), что поток был разбит процессом.
первое, что вам нужно сделать в WinDBG, это загрузить расширения .NET Framework:
.loadby sos mscorwks
затем отобразится управляемый callstack:
!clrstack
если поток не был запуск управляемого кода, затем вам нужно будет проверить собственный стек:
kpn 200
это должно дать вам некоторые идеи. Чтобы продолжить устранение неполадок, рекомендуется прочитать следующую статью:
быстрый поиск нашел IISState - он полагается на средства отладки Windows и должен работать, когда происходит сбой, но, учитывая обстоятельства, которые вы описали, это не должно быть проблемой,
вы также можете использовать DebugDiag для этого
отличное объяснение можно найти здесь:
http://blogs.msdn.com/b/tess/archive/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.aspx