w3p.exe прерван из-за переполнения стека — как отследить проблему?

получаем переполнение стека в продакшене ~ 2-4 раза/день

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

В любом случае, чтобы получить больше информации от средства просмотра событий - рад установить какую-либо форму инструмента прослушивания - даже если я могу просто получить идентификатор потока (установленный для текущего пользователя), который поможет - хотя dll + class/function woudl будь великолепен!

Или это просто вопрос копания, попытки воспроизвести или добавления трассировки??


person steve    schedule 24.11.2010    source источник
comment
У вас есть трассировка стека исключения, чтобы попытаться точно определить местоположение?   -  person Darin Dimitrov    schedule 24.11.2010
comment
Что у вас есть на пути ведения журнала? Это настраивается и можете ли вы повернуть ручки на 11?   -  person The Archetypal Paul    schedule 24.11.2010
comment
у нас есть глобальный обработчик исключений - но это переполнение стека, поэтому обходит стандартную обработку исключений asp.net (application_erro/elmah/etc)   -  person steve    schedule 24.11.2010


Ответы (3)


Существует инструмент IISDiag, который можно запускать в рабочей среде IIS для анализа сбоев. Немного информации здесь:

http://support.microsoft.com/kb/919790

Он предназначен не только для утечек — он создает что-то вроде CORE-файла, который вы можете проанализировать позже.

person Lou Franco    schedule 24.11.2010

Используйте Elmah для регистрации исключений. Чтобы добавить ведение журнала необработанных исключений с помощью Elmah, вам нужно всего лишь поместить сборку в папку bin приложения и добавить раздел Elmah в веб-конфигурацию для базового сценария ведения журнала.

Если журналов недостаточно для определения источника ошибки, вы можете создать дампы памяти состояния сбойного приложения, используя DebugDiag. Существует руководство по его использованию здесь.

person PHeiberg    schedule 24.11.2010

Вы можете поместить глобальный обработчик исключений в файл global.asax. Поместите обработчик исключений, а затем запишите трассировку стека в журнал событий. Эта статья имеет довольно хорошее краткое описание того, как это сделать, хотя я уверен, что есть и много других. Как только вы узнаете, где возникает ошибка, вы можете добавить дополнительную запись в функцию, в которой возникает ошибка, и, надеюсь, сузить ее до тех пор, пока не найдете конкретную проблему.

person TLiebe    schedule 24.11.2010