Почему процент ЦП снижается при максимальной пользовательской нагрузке во время нагрузочного тестирования?

Добрый день всем,

Я выполняю нагрузочное тестирование своего веб-API .NET, размещенного на виртуальной машине Windows 2008 Server. Я использую нагрузочный тест Visual Studio 2012. Однако, как только мой нагрузочный тест достигает 780 одновременных пользователей, процент ЦП начинает уменьшаться, как показано на прикрепленном изображении. Нагрузочный тест достигает максимум 1000 одновременных пользователей, но % ЦП по-прежнему снижается при самой высокой пользовательской нагрузке. Я не могу объяснить, почему. Достигнут ли какой-либо предел IIS? Почему это происходит? Достигнута ли максимальная пользовательская нагрузка для этой функции? введите здесь описание изображения

Просто ищу объяснение этому результату и некоторые рекомендации.

Спасибо


person ivan    schedule 10.12.2014    source источник
comment
возможно объединение потоков?   -  person Mike_G    schedule 11.12.2014
comment
можете уточнить, пожалуйста?   -  person ivan    schedule 11.12.2014
comment
Несколько вопросов: Какой тип тестового микса вы используете? (предположим, что, скорее всего, это темп пользователя) Возможно, у вас есть максимальный набор тестовых итераций? Есть ли у вас средства проверки того, что пользователи все еще выполняют намеченную работу с желаемым темпом/скоростью при максимальной пользовательской нагрузке?   -  person Daileyo    schedule 11.12.2014
comment
Есть ли шанс, что у вас есть какой-либо тип кэширования, который должен происходить на ранней стадии выполнения вашего теста, который завершается к тому времени, когда все пользователи вошли в систему?   -  person Daileyo    schedule 11.12.2014
comment
Показанная общая продолжительность теста составляет всего около 15 минут. Это означает, что темпы роста числа виртуальных пользователей очень высоки. Так что комментарий @Daileyo о кэшировании заслуживает внимания. Какова продолжительность индивидуального теста? Я бы порекомендовал повторно запустить тест, но сделать нарастание намного медленнее. Если для выполнения одного теста требуется N секунд, увеличьте количество виртуальных пользователей на 100 каждые 3N–5N секунд. Таким образом, вы получаете постоянную нагрузку на каждом уровне пользователя.   -  person AdrianHHH    schedule 11.12.2014
comment
Я бы также предложил первый тест, который увеличивается на 20 пользователей каждые 3-5N секунд до максимума 200 пользователей, чтобы убедиться, что система работает при умеренной пользовательской нагрузке и что набор тестов дает разумные результаты.   -  person AdrianHHH    schedule 11.12.2014
comment
Возможно, для удовлетворения спроса создается группа потоков, а затем они объединяются в пул, чтобы их можно было использовать повторно. Я просто предполагаю, но я подозреваю, что начальное увеличение ЦП связано с созданием этих потоков, и вы видите уменьшение, потому что эти потоки используются повторно, а не создаются новые.   -  person Mike_G    schedule 11.12.2014
comment
Кэширование IIS было включено, я не знал, что IIS может кэшировать.   -  person ivan    schedule 29.12.2014
comment
Также может случиться так, что ваше приложение привязано к вводу-выводу, а не к ЦП, так что после определенного момента ваш ЦП начинает простаивать часть времени, потому что он ожидает конкуренции за дисковые или сетевые ресурсы.   -  person Joel Coehoorn    schedule 29.12.2014


Ответы (1)


У IIS есть отдельные настройки выходного кэша, которые включены по умолчанию, что начинает иметь смысл после рассмотрения того, как он обрабатывает динамический контент со статическим ответом и кешированием:

Функция кэширования выходных данных IIS предназначена для полудинамического содержимого. Это позволяет кэшировать статические ответы для динамических запросов и повышать масштабируемость.

Настройка пригодности кэша:

Даже если вы включите кэширование вывода, IIS не сразу кэширует запрос. Его необходимо запросить несколько раз, прежде чем IIS сочтет запрос «достойным кэширования». Достоверность кэша можно настроить в разделе ServerRuntime.

Два свойства определяют пригодность кэша:

частыйHitTimePeriod
частыйHitThreshold

Запрос кэшируется только в том случае, если количество запросов к кешируемому URL-адресу, превышающее FrequencyHitThreshold, поступает в течение FrequencyHitTimePeriod.

Это было хорошее объяснение: http://www.iis.net/learn/manage/managing-performance-settings/configure-iis-7-output-caching

person ivan    schedule 29.12.2014