Как отладить w3wp clr.ошибка dll

У моего клиента есть ASP.NET приложение установлено на двух производственных серверах (сбалансировано с NLB, но это не имеет значения). Оба сервера аварийно завершают работу каждые 3-4 часа со следующей ошибкой просмотра событий:

имя приложения Faulting: w3wp.exe, версия: 7.5.7601.17514, отметка времени: 0x4ce7afa2
Имя модуля сбоя: clr.dll, версия: 4.0.30319.18034, отметка времени: 0x50b5a783
Код исключения: 0xc00000fd смещение ошибки: 0x000000000001a840
Идентификатор процесса сбоя: 0xd50
Время начала работы приложения: 0x01ce97fe076d27b4
Путь к приложению ошибок: c:windowssystem32inetsrvw3wp - ... exe
Путь модуля неисправности: C:WindowsMicrosoft.NETFramework64v4.0.30319clr.dll идентификатор отчета: e0c90a5f-0455-11e3-8f0e-005056891553

Я понятия не имею, как отлаживать или с чего начать. Когда произойдет сбой, использование процессора сервера перейдет на 100% и останется там. Процесс по вине процесса w3wp.исполняемый. Я даже не уверен, генерирует ли мой код ошибку или нет. Это IIS 7.5. Любые указатели будут очень признательны.

4 ответов


похоже, у вас есть исключение StackOverflow, которое вызвано неограниченной рекурсией (функция, неоднократно вызывающая себя и т. д.). Это не может быть поймано обычным блоком try/catch. Вы можете отслеживать проблему с помощью DebugDiag и WinDbg.

DebugDiag можно настроить для создания аварийного дампа при возникновении исключения StackOverflowException. Скачать https://www.microsoft.com/en-us/download/details.aspx?id=49924.

  1. откройте DebugDiag и нажмите Добавить правило.
  2. "Crash"уже должен быть выбран. нажимать далее.
  3. выберите "определенный пул веб-приложений IIS" и нажмите кнопку Далее.
  4. выберите пул приложений, и нажмите кнопку Далее.
  5. вы должны быть в окне Дополнительные настройки. Щелкните исключения в разделе Дополнительные параметры.
  6. Нажмите Кнопку Добавить Исключение и выберите переполнение стека с типом действия Full Userdump
  7. нажмите OK и сохраните и закройте.

В следующий раз, когда StackOverflowException происходит, у вас будет аварийный дамп. Теперь нужно интерпретировать файл дампа.

инструменты отладки для Windows являются частью Windows SDK и могут быть загружены по адресуhttp://msdn.microsoft.com/en-US/windows/hardware/gg463009/.

  1. чтобы использовать WinDbg, вам нужно получить файлы символов. загрузите файлы символов и положил их в локальную папку.
  2. откройте WinDbg. В меню Файл выберите пункт путь к файлу символов.
  3. в поле путь символа в документации указано ввести следующую команду:SRV*your local folder for symbols*http://msdl.microsoft.com/download/symbols, однако я просто положил в локальную папку для символов, и это сработало нормально.
  4. выйдите и снова откройте WinDbg, откройте аварийный дамп и найдите файл дампа, который был создан DebugDiag.
  5. в командной строке введите .loadby sos clr
  6. теперь типа !CLRStack

в результатах должно быть ясно, в чем проблема (вы, вероятно, увидите кучу строк, показывающих функцию(ы), которая неоднократно вызывалась).


некоторое дополнение к вышеуказанному ответу. Разработка расширений Explorer, который получил ошибку при входе пользователя. Поэтому для пользователя он выглядит "мигающим экраном" (в то время как проводник пытается запустить и сбой, а затем перезапустить и т. д.). Вошел в систему под другой учетной записью пользователя, установленной DebugDiag и WinDbg. Я использую Windows 8.1 с .Net 4.0 со всеми последними обновлениями на сегодня (13 января 2014) Пробовал загрузить несколько символов локально, но WinDbg не может загрузить clr.pdb из-за неправильного signaure.

решил его с помощью символов онлайн - используйте " SRV*http://msdl.microsoft.com/download/symbols " как путь символов.


другая причина может "бесконечно рекурсивно функционировать". Когда происходит infitine петли окна пытаются avoidence тупик и сопутствующие отключить пул приложений.

Я встретил тот же вопрос сегодня. У меня есть рекурсивная функция, которая перечисляет parentproject-sub project. Один проект устанавливается сам Родительский проект, и когда рекузивная функция try перечисляет все Родительский проект, происходит бесконечный цикл.


Я смог проверить средство просмотра событий - > Журналы Windows - > Система и найти

пул приложений "DankAppPool" автоматически отключается из-за ряд сбоев в процессе (процессах), обслуживающих этот пул приложений.

ниже:

процесс, обслуживающий пул приложений DankAppPool получил смертельный ошибка связи со Службой активации процесса Windows. Этот идентификатор процесса был '5704'. Поле данных содержит номер ошибки.

и:

служба QueueMonitor неожиданно завершилась. Он сделал это 32 время (ы). Следующее корректирующее действие будет предпринято через 60000 миллисекунды: перезапустите службу.

по крайней мере, служба QueueMonitor-это место для начала.