#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.