Проблемы с поддержанием тривиальных чисел RPS с помощью JMeter для тестирования API

#java #api #jmeter #jvm #benchmarking

#java #API #jmeter #jvm #сравнительный анализ

Вопрос:

Я провожу нагрузочное тестирование API с помощью JMeter. У меня есть Macbook Air (клиент), подключенный через Ethernet к машине, которая тестируется с нагрузкой (сервер).

Я хотел провести простой тест. На сервер поступает 5 запросов в секунду (RPS). Я создаю группу потоков параллелизма с 60 потоками, таймер формирования пропускной способности с 5 RPS в течение одной минуты, мой HTTP-запрос и нажимаю кнопку воспроизведения и запускаю тест.

Я ожидаю увидеть, что мой слушатель Hits per Second указывает плоскую строку из 5 обращений в секунду, вместо этого я вижу переменную скорость, начинающуюся с 5, а затем снижающуюся до 2, а затем позже до 4… Иногда их больше, чем указанные 5 RPS (например, 6 RPS), дело в том, что это не постоянная величина 5. Слишком большая переменная скорость — она повсюду. И я не получаю никаких ошибок.

Моему серверу требуется от 500 мс до 3 с, чтобы вернуть ответ, основанный на том, какая нагрузка присутствует — это то, что я тестирую. Чего я хочу достичь с помощью этого теста, так это вернуть как можно больше ответов за время 500 мс под нагрузкой, и я этого не получаю. Я должен начать задаваться вопросом, не является ли это каким-то образом ошибкой JMeter, но это тема для другого дня.

Когда я заменяю свой HTTP-запрос образца фиктивным сэмплером, я получаю RPS, который я хочу.

Я думал, что у меня проблема с ресурсами JMeter, поэтому я меняю размер кучи / памяти на 1 ГБ, использую флаг -XX: DisableExplicitGC и -d64 и запускаю в режиме CLI. Я никогда не получал никаких ошибок, ни до установки флагов, ни после. Кроме того, я считаю, что 5 RPS — это небольшое число, поэтому я не ожидаю, что ресурсы будут проблемой.

Стоит отметить, что иногда потоки начинают выполняться ближе к концу теста, а не в начале, я нахожу это очень странным поведением.

Что дальше? Время переходить на новый инструмент?

Комментарии:

1. Пожалуйста, проверьте это sqa.stackexchange.com/a/20009 Есть хорошее описание для обращений в секунду

2. Вы получаете правильный результат, потому что именно так работает таймер формирования пропускной способности! Таймеры JMeter могут задерживать потоки только для ограничения RPS.