Подтвердить что ты не робот

Что правильно измеряет, JMeter или Apache ab?

Я начал писать некоторые базовые тесты в JMeter и был удивлен, что измерения настолько отличаются от измерений от Apache ab.

У меня есть гигабитная сеть, соединяющая сервер Intel i7 с Nginx и тестовую машину i5 с JMeter или ab. Первоначально я просто тестирую исходную частоту ответа на домашнюю страницу Nginx.

ab -c 1 -n 100 http://testserver.local/

дает

Document Path:          /
Document Length:        151 bytes

Concurrency Level:      1
Time taken for tests:   0.078 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      38400 bytes
HTML transferred:       15100 bytes
Requests per second:    1280.77 [#/sec] (mean)
Time per request:       0.781 [ms] (mean)
Time per request:       0.781 [ms] (mean, across all concurrent requests)
Transfer rate:          480.29 [Kbytes/sec] received

Этот результат постоянно воспроизводится, +/- несколько процентов.


В JMeter у меня есть 1-пользовательская группа с 100 циклами, содержащая:

  • настройка менеджера заголовков HTTP Accept-Encoding: gzip
  • HTTP Get/sampler
  • слушатель итогового отчета

Только с 100 образцами это дает дико непоследовательные результаты каждый раз, когда я запускаю его. Но самым поразительным фактом является то, что пропускная способность составляет всего 40 запросов в секунду (не 1280). Самая высокая зарегистрированная скорость составила 1030, и это было достигнуто только тогда, когда я увеличил до 10000 образцов.

Правильно ли я полагаю, что JMeter является неправильным инструментом для простых нагрузочных тестов, потому что его накладные расходы слишком велики, чтобы обеспечить точные измерения?

4b9b3361

Ответ 1

Jmeter сообщает вам, сколько времени прошло каждый запрос на самом деле. AB просто выполняет некоторую основную математику, чтобы получить общее среднее значение. Итак, прямой ответ на ваш вопрос заключается в том, что jmeter получает все правильно, и ab просто делает приблизительное предположение, предоставляя вам среднее значение во всем.

Но, конечно, если вы ставите два инструмента рядом друг с другом и оцениваете их скорость, то очевидно, что ab собирается выполнить jmeter. Jmeter просто делает больше, он записывает больше данных и обрабатывает больше логики, поэтому для обхода одного запроса требуется больше времени. Простой факт заключается в том, что Jmeter является полнофункциональным инструментом тестирования нагрузки, AB, ну, а не.

Дело в том, что цель инструмента тестирования нагрузки не должна быть самым быстрым ребенком на блоке, вместо этого речь идет о возможности создания реалистичного представления о том, какую нагрузку может принести ваше приложение, когда оно идет жить. В этом отношении jmeter выигрывает руки, так что это действительно зависит от ваших требований. Если вы просто хотите генерировать столько запросов, сколько возможно, используя наименьшее количество аппаратных средств, тогда ab - отличный выбор, но если вы хотите создать репрезентативный тест, с транзакционными поездками, условной логикой и всеми другими полезными вещами, тогда jmeter путь. Подумайте об этом так: они оба являются проектами Apache, но AB, я думаю, был разработан для тестирования веб-сервера apache, однако JMeter был разработан для тестирования Tomcat.

Теперь я предполагаю, что jmeter производит непоследовательные результаты, потому что он нажимал предел на машине, на которой он работал. Я уверен, что вы работали в режиме графического интерфейса и были активны хотя бы один слушатель, вот так вы просите инструмент сделать много. Если вам нужен высокий уровень запросов, то Jmeter имеет скудный и средний режим. Как правило, для больших томов наилучшей практикой является выполнение тестов в командной строке с очень небольшим количеством слушателей; там много информации об этой теме на сайте apache jmeter.

Еще один момент, который вы должны рассмотреть, если вы действительно проходите тестирование нагрузки, заключается в том, что для того, чтобы действительно получить выгоду от такого рода вещей, вам нужно сначала решить, какую нагрузку вам нужен для поддержки вашего сайта, и только тогда если вы создадите тест, который представляет это. Это достигается с помощью стимуляции и моделирования времени ожидания. Проблема с сообщением нити, которая должна просто уйти и работать так быстро, как это возможно, состоит в том, что она будет проходить так же быстро, как позволяют ее локальные условия, но всегда будет что-то, что помещает перерывы, даже ab ограниченное; независимо от того, насколько легкий инструмент он все еще что-то делает. Но если вы выполняете свои запросы, тогда вы удаляете эту проблему и в качестве весьма полезного добавленного бонуса вы получаете согласованность между прогонами и между сборками кода, поэтому даже если ваш сервер ускоряется или замедляется (с изменениями в базе кода) ваш тест по-прежнему будет делать ту же скорость запросов, что очень полезно для бенчмаркинга.

Если вы хотите принять JMeter далее, посмотрите на постоянный таймер пропускной способности, а затем используйте несколько потоков для создания уровня трафика, который вам нужно представить.

Ответ 2

В вашей настройке JMeter насыщает себя быстрее, чем может насытить ваш веб-сервер.

У вас работает очень оптимизированный веб-сервер C на превосходном оборудовании и его оценка с относительно тяжелым Java-приложением на меньшем аппаратном уровне. Оптимизированный машинный код C (вероятно) всегда будет быстрее, чем байт-код Java. JMeter не в состоянии идти в ногу с Nginx и поэтому дает вам странные результаты, поскольку он поражает аппаратные ограничения. Java делает много приятных вещей в фоновом режиме, которые управляют аппаратными ресурсами, но также создают непредсказуемое поведение при экстремальном использовании ресурсов. С другой стороны, ApacheBench - это достаточно легкая программа на С, которая может насыщать сервер и может давать согласованные результаты, поскольку у него избыточная емкость после насыщения вашего веб-сервера.

JMeter отлично подходит для настольных маркировок тяжелых динамических приложений, которым требуется некоторое время для обработки запросов. Все дополнительные данные, которые он предоставляет, помогают в таких веб-приложениях. Когда вы имеете дело со статическим файловым сервисом (как раз тем, что может сделать веб-сервер) на высоко оптимизированных веб-серверах, вам нужен инструмент достаточно быстро, чтобы не отставать.

Ответ 3

Как уже говорилось в первом ответе, ключевое слово "требования". JMeter - лучший выбор для тестирования сервера, обслуживающего веб-страницы. Например, он может отправлять последовательность запросов, генерировать запрос на разницу для каждой последовательности, анализировать ответы HTML и загружать содержимое изображений и скриптов из HTML. AB является лучшим выбором для тестирования REST API, где вам нужно, чтобы сервер отвечал как можно быстрее и подавал как можно больше запросов, нет связи между двумя запросами секвенции и т.д. Таким образом, AB действительно может генерировать больше запросов, чем JMeter против одного и того же сервера с одного и того же клиентского компьютера.