IIS7: сбой приложения w3wp.exe, что является основной причиной этих сбоев? - PullRequest
6 голосов
/ 11 декабря 2010

Наш веб-сайт находится в .NET, но с некоторыми старыми ASP и 32-битными библиотеками. Некоторое время он работал нормально (2 года). Но в прошлом месяце мы видели следующую ошибку на нашем сервере IIS7, которую мы не смогли отследить и исправить:

"Неисправное приложение w3wp.exe, версия 7.0.6001.18000, отметка времени 0x47919413, неисправный модуль kernel32.dll, версия 6.0.6001.18215, отметка времени 0x4995344f, код исключения 0xe053534f, смещение ошибки 0x0002f328, идентификатор процесса 0x% 9, запуск приложения время 0x% 10. "

Мы можем воспроизвести ошибку:

  • Одна из наших страниц .ASPX начинает загружаться, выполнять код и запросы (у нас есть response.flush () по всей странице, чтобы отследить, где код нарушается), затем она внезапно останавливается, и мы получаем вышеупомянутую ошибку в IIS.

  • Страница перестает загружаться и без response.flush () не перенаправляет на нашу страницу error.aspx (как настроено в web.config)

  • Ошибка не происходит все время. Иногда это происходит 3 раза подряд, а затем работает нормально в течение 15 минут без перерыва с правильным перенаправлением на error.aspx.

  • Полученная нами тогда ошибка является классической: «Либо BOF, либо EOF - True, либо текущая запись была удалена».

  • Когда возникает ошибка, страница зависает, и все другие сеансы на том же компьютере из любых браузеров также имеют зависшие веб-страницы (кстати, мы разрешаем только 1 рабочий процесс во время тестирования). С других компьютеров сайт загружается нормально.

  • Я могу перезапустить пул приложений, убить w3wp.exe, перезапустить IIS. Ничего не поделаешь Единственный способ успешно загрузить страницу снова - это перезапустить MS SQL, который обрабатывает наши состояния сеанса. Я не знаю, почему это так, но мы предположили, что сессионные куки-файлы в браузерах пользователей указывают на поток, который не был завершен должным образом (из-за вышеуказанного сбоя), и IIS ожидает его завершения для обработки большего количества кода (? ). Если кто-то может объяснить это лучше, это было бы очень полезно. Есть ли тайм-аут, который мы можем установить для «завершения» потоков? Это проблема, связанная с MS SQL?

Я также рассмотрел использование частной и виртуальной памяти, потому что я думаю, что наш код не самый эффективный, и я уверен, что у нас остаются утечки памяти. Тем не менее, я видел сбой страницы, хотя частные и виртуальные воспоминания были все еще довольно низкими (менее 100 МБ каждая).

Я использовал Debug Diag и WinDbg, как указано здесь: http://blogs.msdn.com/b/tess/archive/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.aspx,, но мы не можем заставить работать windbg, это то, что мы сейчас пытаемся сделать.

Если кто-то может помочь нам или указать нам правильное направление, которое было бы действительно здорово, спасибо.

Ответы [ 4 ]

2 голосов
/ 16 декабря 2010

«BOF или EOF - True, или текущая запись была удалена» означает, что таблица пуста, и вы пытаетесь выполнить MoveNext.Так что проверьте eof, прежде чем делать какие-либо ходы .

IIS печально известен тем, что выдает ошибки ядра в w3wp.exe, как этот.Все ваши ошибки в состоянии сеанса являются симптомами сбойного процесса.Несколько пулов приложений не сильно помогут - они просто распространяют ошибку.

Держу пари, что это тупики SQL из-за изменения пользовательской среды.Это приведет к задержке в 10 секунд, так как SQL пытается определить, какой запрос нужно убить.Один выигрывает, один проигрывает.Проигравший получает указатель на неожиданно пустую таблицу, и вы пытаетесь переместить и последующий сбой.Возможно, вы могли бы указать вашей БД на соединение ODBC и включить трассировку, или найти способ заставить SQL регистрировать это.

У меня были все те же симптомы, что и в Perl.Мне удалось создать оболочку fn () для выполнения всех SQL-запросов и записи всех sql, + params и любых ошибок на диск для отслеживания проблемы.Это были взаимоблокировки, затем мы смогли закодировать в режиме автоповтора, и в итоге мы перекодировали порядок запросов и отсканировали столбцы, чтобы устранить взаимоблокировки.

0 голосов
/ 22 января 2014

Это, вероятно, крайний случай, но на тот случай, если кто-то сюда заходит и использует MVCMailer , я получал эту же ошибку из-за метода .SendAsync () в почтовых программах.

Я переключил их всех на .Send () и сбой прекратился.

См. этот SO-ответ о том, как использовать асинхронную программу почтовой программы и избежать сбоя (якобы, я лично не реализовывал это)

0 голосов
/ 04 июля 2013

Мы начали получать эту ошибку после установки обновлений Windows на компьютере с Windows Server 2008R2. Служба активации процессов Windows (WAS) устанавливает некоторые дополнительные привязки сайтов, которые вызвали проблемы для нашей установки.

Мы удалили привязки net.tcp, net.pipe, net.msmq и msmq.formatname с нашего веб-сайта и больше не получали исключающее приложение-ошибку.

0 голосов
/ 11 декабря 2010

Вполне возможно, что одна из ваших ссылочных / связанных сборок где-то случайно испортилась (это может произойти) на диске. Можете ли вы попробовать повторить проблему на новом, чистом компьютере с той же статистикой, свежими установками последних используемых вами драйверов xyz?

Я решил загадочную проблему, на которую у меня ушли месяцы, чтобы изолировать этот путь. Казалось, что новые машины с такими же характеристиками и необходимыми драйверами будут работать нормально - только некоторые старые машины с такими же характеристиками постоянно выходили из строя. В итоге я удалил все (IIS, ASP.NET, .NET, базу данных и клиент) и начал с нуля. Конечная причина, когда я изолировал это, состояла в том, что драйвер клиента db был поврежден на более старых машинах (и все более старые машины были клонами друг от друга, поэтому я предполагаю, что они были клонированы после возникновения повреждения), и казалось, что он перепутал пространство памяти .NET, даже когда я не вызывал его напрямую. Я еще даже не ответил на мой пост "помогите мне отладить этого монстра" с этим ответом, потому что я сомневался, что он когда-нибудь кому-нибудь поможет.

...