#asp.net #performance #logging
#asp.net #Производительность #ведение журнала
Вопрос:
Я получаю жалобы от пользователей, которые ASP.NET веб-приложение, за поддержку которого я отвечаю, работает периодически медленно. Как можно регистрировать данные о времени генерации страницы, чтобы я мог количественно определить, так ли это, и если да, то какие страницы медленные и в какое время суток. Я не хочу, чтобы эта информация отображалась пользователю, я просто хочу регистрировать ее где-нибудь для каждого запроса страницы, а затем я буду просматривать журналы ежедневно или еженедельно и импортировать их в базу данных или Excel для манипуляций.
Я рассмотрел некоторые вопросы SO, в которых обсуждается включение трассировки, но я не смог определить, где регистрируются эти данные трассировки.
Дополнительные баллы за то, что не требует изменения кода, поскольку это производственная система, и я хотел бы иметь возможность использовать любые счетчики производительности и существующие функции ведения журнала, которые предоставляются из коробки, вместо того, чтобы использовать свои собственные, если это возможно.
Ответ №1:
Журналы IIS, с которых проще всего начать, также требуют наименьших изменений. Убедитесь, что в диспетчере IIS стоит галочка «Затраченное время». Расположение журналов по умолчанию будет где-то здесь %SystemDrive%inetpub logs LogFiles, (вам нужно будет определить экземпляр вашего веб-сервера). Поле Затраченное время в миллисекундах будет добавлено к строке журнала запросов. Вы можете импортировать его в Excel или использовать такие инструменты, как IIS Log analyzer.
Trace.axd в web.config убедитесь, что трассировка включена.
<system.web>
<trace enabled="true" localOnly="false" requestLimit="50" />
</system.web>
перейдите к приложению, сделайте что-нибудь там. затем перейдите к http://yourhost/yourApp/Trace.axd , он будет отображать тайминги с самого начала для событий каждой страницы. Оттуда можно получить некоторую информацию. Но это не так много.
Ответ №2:
вы можете использовать HttpModule с событиями: вы должны создать dll и через webconfig зарегистрировать ее в разделе httpmodule. теперь вы должны поставить секундомер в ProcessRequest и PostREquestHandlerExecute . и тогда у вас будет общее время. также вы можете использовать трассировку, но внутреннюю по отношению к самой странице …. и обойти некоторые события инициализации…
ProcessRequest
..
..
..
page things...
..
..
..
PostREquestHandlerExecute