Извините, я не смог придумать, как правильно сформулировать мой настоящий вопрос.
Я использую сайт ASP.NET с высоким трафиком на 64-битной машине. Однако IIS работает в 32-разрядном режиме из-за некоторых устаревших компонентов приложения. Я запускаю это конкретное веб-приложение в пуле приложений, для которого включена опция веб-сада (запущено 6 процессов на 8-ядерном компьютере).
Один или два раза в неделю один из процессов взлетит до 100% загрузки ЦП, что приведет к гигантскому замедлению работы сайта, поэтому я планировал подождать, пока это не произойдет, сбросить память из-за процесса сбоя, а затем обработать WinDbg до нуля в потоке, который показывает, где код крутится.
Я отлаживал с помощью WinDbg прежде, чтобы выяснить, что стало причиной тупиковой ситуации на сайте, но это было несколько месяцев назад, и я не могу вспомнить, как у меня это получилось. (Как примечание, это урок для документирования всего, что вы делаете.)
Я запускаю WinDbg на сервере Windows 2003, на котором работает сайт, чтобы предотвратить проблемы с версиями DLL. Здесь были мои шаги, пожалуйста, дайте мне знать, где я иду неправильно, чтобы получить сообщение об ошибке, которое я получаю.
Сначала я делаю дамп памяти процесса spiking, используя UserDump, с помощью следующей команды, где 3389 - идентификатор процесса:
userdump -k 3389
Я загружаю дамп в x86-версию WinDbg.
Поскольку я использую 32-разрядную версию на 64-разрядной машине, я сначала загружаю дамп памяти, а затем:
.load wow64exts
.effmach x86
Я уверен, что мой путь к символам включает в себя каталог, содержащий файлы PDB моих приложений:
.sympath+ c:\inetpub\myapp\bin
Запуск только `.load SOS 'завершается с ошибкой« Системе не удается найти указанный файл », поэтому я иду по полному описанному ниже маршруту, который работает:
.load c:\windows\microsoft.net\framework\v2.0.50727\sos
Отсюда я заблудился. Я пытаюсь использовать любую из команд SOS, например !threads
, только для получения этой ошибки:
Failed to load data access DLL, 0x80004005
Эта ошибка также сопровождается нумерованным списком элементов, которые я должен проверять.
Я проверил, что я использую самую последнюю версию отладчика, mscordacwks.dll фактически находится в том же каталоге, что и файл mscorwks.dll, и я отлаживаю в той же архитектуре, что и файл дампа.
Я также выполнил волшебную команду ".cordll -ve -u -l
", но это ничего не решает. Меня всегда приветствуют "CLR DLL status: No load attempts
", когда я выполняю это. Затем я пытаюсь ".reload
", что дает несколько предупреждений, таких как "WARNING: wldap32 overlaps dnsapi
". Я хочу он сказал что-то вроде "CLRDLL: Loaded DLL C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll
". Но это не так.