#performance #jmeter #jmeter-5.0 #threadgroup
Вопрос:
Я сталкиваюсь с проблемой в JMeter 5.4.1, когда мои группы потоков не достигают указанных транзакций в секунду.
У меня есть две группы потоков в одном тесте JMeter, которые выполняются параллельно. Каждая группа потоков выполняет один вызов API. Первая группа потоков имеет 300 выделенных ей потоков и имеет таймер постоянной пропускной способности с целевой пропускной способностью 45 000 выборок в минуту, что в конечном итоге составляет 750 транзакций в секунду. Вторая группа потоков имеет 100 выделенных ей потоков и имеет таймер постоянной пропускной способности с целевой пропускной способностью 9000 выборок в минуту, что в конечном итоге составляет 150 транзакций в секунду.
После выполнения нескольких тестов обе группы потоков никогда не достигают своей целевой пропускной способности. Первая группа потоков выполняет около 300 транзакций в секунду, а вторая группа потоков выполняет около 100 транзакций в секунду. Среднее время отклика для первой группы потоков составляет 5 мс, а среднее время отклика для второй группы потоков-8 мс. Это наводит меня на мысль, что служба во время тестирования работает нормально, но машина JMeter-нет.
Любопытно, что параллельное выполнение этих групп потоков на одном экземпляре JMeter приводит к сокращению транзакций в секунду. Мы провели эксперимент, в котором разделили две группы потоков на два разных экземпляра JMeter и запустили их одновременно на одной машине. Это позволило нам совершать правильные транзакции в секунду. Это заставляет меня поверить, что машина может идти в ногу со временем, но есть что-то странное в JMeter, когда он запускает эти два потока в одном экземпляре JMeter. Есть какие-нибудь подсказки о том, почему это так и как это исправить?
Ответ №1:
- Таймер постоянной пропускной способности может приостанавливать потоки JMeter только для ограничения пропускной способности до желаемого значения, он не будет запускать дополнительные потоки, если текущего объема недостаточно для выполнения требуемой нагрузки. Для этого можно использовать комбинацию группы потоков параллелизма и таймера формирования пропускной способности (пожалуйста, прочитайте ответ до конца, прежде чем пытаться).
- Ваше приложение должно реагировать достаточно быстро, т. е. Если вы пытаетесь выполнить 750 запросов в секунду с 300 потоками, максимальное время отклика должно быть меньше или равно 400 мс, если это займет больше времени — пропускная способность будет пропорционально ниже.
- JMeter должен иметь возможность отправлять запросы достаточно быстро, вы не можете запускать его на паршивом ноутбуке и ожидать, что он выполнит успешную DoS-атаку против распределенного кластера с автоматическим масштабированием, поэтому:
- обязательно следуйте рекомендациям JMeter
- убедитесь, что машина, на которой вы запускаете JMeter, имеет достаточно ресурсов и не испытывает недостатка в оперативной памяти, процессоре и т.д., Вы можете сделать это с помощью плагина JMeter PerfMon
- если одной машины недостаточно для выполнения требуемой нагрузки — подумайте о том, чтобы найти другую и запустить JMeter в распределенном режиме
Комментарии:
1. Как это объясняет, почему я могу совершать правильные транзакции в секунду на двух экземплярах JMeter на одной машине, но не на одном экземпляре JMeter?