Наш веб-сайт находится в .NET, но с некоторыми старыми ASP и 32-битными библиотеками. Некоторое время (2 года) работал нормально. Но в течение последнего месяца мы видели следующую ошибку на нашем сервере IIS7, которую мы не смогли отследить и исправить:
«Сбойное приложение w3wp.exe, версия 7.0.6001.18000, отметка времени 0x47919413, неисправный модуль kernel32.dll, версия 6.0.6001.18215, отметка времени 0x4995344f, код исключения 0xe053534f, смещение ошибки 0x0002f328, идентификатор процесса 0x%x9, время запуска приложения 0x%x9 10".
Мы можем воспроизвести ошибку:
Одна из наших страниц .ASPX начинает загружаться, выполнять код и запросы (у нас есть response.flush() по всей странице, чтобы отслеживать, где прерывается код), затем она внезапно останавливается, и мы получаем указанную выше ошибку в IIS.
Страница перестает загружаться, и без response.flush() она не перенаправляется на нашу страницу error.aspx (как настроено в web.config)
Ошибка возникает НЕ постоянно. Бывает, бывает 3 раза подряд, потом минут 15 работает нормально без остановок с правильным перенаправлением на error.aspx.
При этом мы получаем классическую ошибку: «Либо BOF, либо EOF имеет значение True, либо текущая запись была удалена».
Когда возникает ошибка, страница зависает, и все другие сеансы на том же компьютере из любых браузеров также имеют зависшие веб-страницы (кстати, мы разрешаем только 1 рабочий процесс во время тестирования). С других компов сайт загружается нормально.
Я могу перезапустить пул приложений, убить w3wp.exe, перезапустить IIS. Ничего не получится. Единственный способ снова успешно загрузить страницу — перезапустить MS SQL, который обрабатывает наши состояния сеанса. Я не знаю, почему это так, но мы предположили, что файлы cookie сеанса в браузерах пользователей указывают на поток, который не был завершен должным образом (из-за вышеупомянутого сбоя), и 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, это то, что мы пытаемся сделать в данный момент.
Если бы кто-то мог помочь нам или указать нам правильное направление, это было бы действительно здорово, спасибо.