Наш веб-сайт находится в .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, это то, что мы сейчас пытаемся сделать.
Если кто-то может помочь нам или указать нам правильное направление, которое было бы действительно здорово, спасибо.