Странное отставание в конвейере http с ASP.NET MVC на IIS6 - PullRequest
2 голосов
/ 09 августа 2010

У меня есть приложение ASP.NET MVC, работающее на IIS6 с включенным сопоставлением по шаблону. После выполнения некоторых нагрузочных тестов я копался в лог-файлах, сосредотачиваясь на медленных запросах. У меня есть файл журнала из приложения нагрузочного тестирования, файл журнала IIS и файл журнала из IHttpModule, который я разрабатываю для этой цели и который записывает время Application.BeginRequest и Application.EndRequest.

Когда я сравнил данные для медленных запросов в файле журнала IIS и файле журнала моего модуля, я обнаружил странное поведение.

var request_processing_start = iis_log_file.time - iis_log_file.taken
var aspnet_processing_start = my_module_log_file.begin_request_called
var aspnet_processing_end = my_module_log_file.end_request_called
var request_processing_end = iis_log_file.time

Для всех запросов значения aspnet_processing_end и request_processing_end совпадают довольно близко (разница не более нескольких миллисекунд). Однако некоторые запросы имеют промежуток времени от request_processing_start до aspnet_processing_start до 30 секунд. В чем причина этого лага и как я могу его предотвратить?


Еще несколько подробностей о нагрузочном тесте, который я провел:

  • Количество запросов: при длительном среднем 2 в секунду, в пиках не более 20 в секунду. (Это действительно низкий уровень, мы не можем винить сопоставление с подстановочными знаками)
  • Использование процессора: плоская линия ниже 5% (мы не можем винить отсутствие мощности процессора)
  • Свободная память: более 1 ГБ (Память также не проблема).
  • Задержка, которую я описал, возникает только тогда, когда сервер находится под нагрузкой. Когда приложение нагрузочного тестирования не запущено, его невозможно воспроизвести.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...