Подтвердить что ты не робот

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

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

Неверное имя приложения: w3wp.exe, версия: 7.5.7601.17514, отметка времени: 0x4ce7afa2
Неверное имя модуля: clr.dll, версия: 4.0.30319.18034, отметка времени: 0x50b5a783
Код исключения: 0xc00000fd Смещение ошибки: 0x000000000001a840
Идентификатор процесса отказа: 0xd50
Время сбоя приложения: 0x01ce97fe076d27b4 ​​
Ошибка пути приложения: c:\windows\system32\inetsrv\w3wp.exe
Ошибка в пути модуля: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Идентификатор отчета: e0c90a5f-0455-11e3-8f0e-005056891553

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

4b9b3361

Ответ 1

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

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

  • Откройте DebugDiag и нажмите "Добавить правило".
  • "Crash" должен быть выбран. Нажмите "Далее" .
  • Выберите "Конкретный пул веб-приложений IIS" и нажмите "Далее" .
  • Выберите пул приложений и нажмите "Далее" .
  • Вы должны находиться в окне расширенной конфигурации. Нажмите "Исключения" в разделе "Дополнительные настройки".
  • Нажмите "Добавить исключение" и выберите "Переполнение стека" с типом действия "Полный пользовательский доступ"
  • Нажмите "ОК" и сохраните и закройте.

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

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

  • Чтобы использовать WinDbg, вам нужно получить файлы символов. Загрузите файлы символов и поместите их в локальную папку.
  • Откройте WinDbg. В меню "Файл" выберите "Путь к символьному файлу".
  • В поле "Путь к символу" в документации говорится ввести следующую команду: SRV*your local folder for symbols*http://msdl.microsoft.com/download/symbols, однако я просто поместил в локальную папку символы и работал нормально.
  • Выйдите из и снова запустите WinDbg и откройте Crash Dump и найдите файл дампа, созданный DebugDiag.
  • В командной строке введите .loadby sos clr
  • Теперь введите !CLRStack

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

Ответ 2

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

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

Ответ 3

Другая причина может "бесконечно рекурсивно функционировать". Когда происходит infinine loop Windows, попытайтесь устранить тупик и отключите освобожденный пул приложений.

Сегодня я встретил такую ​​же проблему. У меня есть рекурсивная функция, которая перечисляет проект parent-project-sub. Один проект настроен на собственный родительский проект, и когда возвращающая функция пытается перечислить весь проект-родительский субподряд, происходит бесконечный цикл.

Ответ 4

Мне удалось проверить Event Viewer → Windows Logs → System и найти

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

Ниже:

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

и

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

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