QTAGENT.EXE с использованием всех доступных процессоров - PullRequest
5 голосов
/ 19 октября 2011

Я довольно новичок в нагрузочном тестировании с VS, но я думаю, что все настроил нормально, и у меня возникла проблема, когда выполнение моего Load Test быстро достигает 100% загрузки ЦП. Вероятно, это повлияет на мои результаты теста, и я предполагаю, что это не ожидаемое поведение.

Моя аппаратная платформа - сложная машина для разработчиков: несколько месяцев назад она была оснащена четырехъядерным процессором, 12 ГБ ОЗУ, 2 IDE-дисками и быстрой сетевой картой. Я могу уточнить, если это необходимо, но обычно я бы сказал, что это крики.

Я тестирую приложение MVC2 / 3, которое работает локально на Win7 x64, против MSSQL 2008, используя VS2010 SP1, C # /. NET 4.

Базовым тестом является модульный тест, в котором используется метод одного контроллера MVC, который использует Unity и другие библиотеки Ent-Lib для извлечения коллекции клиентов из базы данных в соответствии с правами пользователя. Типичное время выполнения модульного теста составляет от 0,4 до 0,6 секунд.

Тест нагрузки настроен на выявление проблемы с производительностью и выполняется в течение 10 минут:

  • Начальное количество пользователей: 1
  • Продолжительность шага: 30
  • Количество шагов пользователя: 1

Замечания:

  1. В течение первых 30 секунд для одного пользователя выполнение немного ошибочно. Первый тест занимает 3 секунды, что является нормальным прогревом. Следующие 15 или около того занимают около 0,4 секунды, что идеально. Однако через 10 секунд тесты начинают работать в течение 5 секунд. Это до включения второго виртуального пользователя. По мере появления дополнительных виртуальных пользователей время тестирования постепенно увеличивается, что и следовало ожидать, хотя время выполнения все еще кажется большим.

  2. Больше беспокойства вызывает то, что загрузка ЦП резко возрастает у пользователя 6 (в среднем он составлял около 20% ранее по всем 8 ядрам). У пользователей 6 и 7 ЦП идет до 70% и привязывается к 100% на 8 ядрах пользователем 8 и остается там до тех пор, пока тест не завершится через 10 минут. Само собой разумеется, что для обычного пошагового теста я хотел бы начать с 10 одновременных пользователей и довести их до 100 или более, но мой ЦП запускается на 100%, и результаты, безусловно, неточные.

Купритом явно является QTAGENT.EXE, как я вижу по выполненным задачам. Он использует каждый запасной цикл процессора из того, что я вижу. Я также провел этот нагрузочный тест в 32-разрядном режиме, и QTAGENT32.EXE работает аналогично.

Я в недоумении, почему я испытываю эту проблему, не говоря уже о том, что с этим делать. Любые предложения или решения приветствуются. ТИА!

EDIT

Я обнаружил, что решение моей проблемы - запустить нагрузочное тестирование, нажав «Отладочный тест» вместо «Выполнить тест». Это на самом деле не имеет никакого смысла для меня, на самом деле это как полная противоположность того, что я ожидал; тем не менее, я не могу отрицать, что он постоянно запускает мои тесты с сотнями пользователей и только наполовину избивает мой процессор (~ 50% в среднем с пиками).

Ответы [ 3 ]

5 голосов
/ 20 октября 2011

QTAgent - это код, который выполняет всю нагрузочную проверку.Он проходит через каждого виртуального пользователя, выполняющего тесты.

Одна из причин, по которой процессор агента тестирования привязан, заключается в том, что ваш веб-сайт очень быстро возвращает результаты.Хороший способ смоделировать это - загрузить тестовую статическую HTML-страницу или запросить страницу, которая хорошо кэшируется IIS.

Проверьте значение количества запросов в секунду для теста.Это значение является разумной мерой того, сколько работы требуется QTAgent.

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

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

Тем не менееВыполнение нагрузочных тестов в веб-приложении, размещенном на той же машине, не может обработать очень много виртуальных пользователей, пока процессор не отключится.

Можете ли вы публиковать статистику запросов в секунду?

1 голос
/ 27 октября 2011

Так что дело дошло до ошибки пользователя. Оказывается, контроллер, который я тестировал, был очень ресурсоемким. Я читал об этом как о наиболее вероятной причине высокой загрузки ЦП в других местах, но я предположил (упс), что 8 одновременных пользователей, попавших в этот конкретный контроллер, не могли привязать мой ЦП. Нет, на самом деле, наш код очень дорогой для запуска, и 8 пользователей, запрашивающих страницу одновременно, максимально его используют. Спасибо за все предложения.

0 голосов
/ 19 октября 2011

Может быть, что-то здесь может помочь: https://serverfault.com/questions/16005/what-affects-sql-connection-speed

Другие идеи:

  • SQL Server находится в локальной коробке?Запуск теста на том же компьютере может вызвать проблемы, поскольку SQL Server и QTAgent будут конкурировать за время обработки.Каждый тестовый поток будет соответствовать одному потоку базы данных, и, если ваши модульные тесты не вызывают асинхронный вызов базы данных, они будут заняты ожиданием, пока база данных ответит.У 8 пользователей это 8 потоков модульного тестирования и 8 потоков базы данных ... может быть, 16 потоков, набирающих полную скорость, достаточно, чтобы заглушить процессор.

  • Ваш тест закрывает соединение после каждой итерацииили вы оставляете соединения открытыми?Вы можете проверить количество соединений с SQL Server в Perfmon, чтобы определить это.

  • Это SQL Server Express?Может быть, он не такой надежный, как другие версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...