У меня есть веб-приложение .Net Framework 4.0, ASP.NET, ASP.NET MVC 3, размещенное на Windows 7 / IIS 7.5.Ведение журнала IIS на этом компьютере включено и настроено для входа в режиме W3C.
Приложение скомпилировано с использованием конфигурации выпуска и было развернуто в IIS с явно установленным атрибутом <compilation debug='false'
.Web.config определяет использование состояния сеанса на основе SQL Server.
Я добавил следующие выражения в Global.asax в событиях BeginRequest и EndRequest соответственно.Результаты, т. Е. «Sw.Elapsed.TotalMilliseconds», сохраняются в списке значений уровня приложения.Я выкидываю эти значения через страницу отладки и получаю в среднем то же самое.
// in BeginRequest
HttpContext.Current.Items.Add("RequestStartEnd", System.Diagnostics.Stopwatch.StartNew());
// in EndRequest
var sw = (System.Diagnostics.Stopwatch)HttpContext.Current.Items["RequestStartEnd"];
sw.Stop();
Я создал нагрузочный тест, который запускает один запрос к этому приложению с одновременной пользовательской нагрузкой в 20 пользователей.Тест выполняется в Visual Studio 2010 Ultimate Edition.
После запуска нагрузочного теста я получаю среднее время, которое записывается секундомером, как 681 миллисекунду. Среднее время, требуемое в соответствии с IIS для этихзапросы (я очистил все журналы перед запуском нагрузочного теста) составляет 2121 миллисекунду.Среднее время, затрачиваемое согласно подсчетам IIS, со значением, показанным в отчете о нагрузочном тесте Visual Studio.
Время, затраченное на секундомер, составляет только 32% времени, указанного в журналах IIS / Visual Studio.Куда уходит остальные 68% времени?
Обновление 1: Я установил состояние сеанса на InProc и повторно запустил нагрузочный тест.В этом сценарии разница между средним временем, сообщаемым секундомером, и средним временем, зарегистрированным журналами IIS, выросла до более чем 70% !!!Куда все это время идет?
Обновление 2: @Peter - я опробовал трассировку невыполненных запросов, установив правило трассировки для входа в код состояния 200. Затем я запустил нагрузочный тест с 20 одновременными пользователями дляоколо 1,5 минут.Просматривал последние 50 файлов трассировки и обнаружил, что поле «Время взято» в этом отчете имеет диапазон от 750 до 1300 мс.Отчет Visual Studio показал среднее значение.время, принятое как 2300 мс.В отчете, используя компактный вид, я вижу, что время, затраченное на изменение, изменяется между следующими переходами (1) AspNetStart -> AspNetAppDomainEnter (2) ManagedPipelineHandler-start ManagedPipelineHandler-end.Элемент (2), вероятно, код моего приложения.Тем не менее, существует большая разница между максимальным количеством времени, затрачиваемым согласно журналам неудачных запросов, т.е. 1300 мс, и средним значением.время, как показано Visual Studio 2300ms.Как найти учет для этого?Спасибо за этот замечательный совет, хотя!