Как заставить jmeter запускать много запросов за небольшой промежуток времени - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу сделать нагрузочный тест для моего API с вызовами API 500k.

Я сделал тест JMeter, который читает из CSV-файла токен доступа и с этим токеном выполняет вызов API.

Конечно, с одного компьютера я не могу выполнить столько запросов, поэтому я реализую распределение серверов JMeter, поэтому у меня на AWS один главный и 500 серверов, которые являются подчиненными (t3.medium).

На тесте я установил циклы: 1000 (не очень большое число) Разгон: 5 секунд. Я хочу, чтобы тест длился 5 секунд. Таким образом, общая загрузка вызовов API 500k должна быть сделана в течение 5 секунд. Неважно, когда тест начнется, но мне нужно сделать все запросы от всех подчиненных серверов в течение этого 5-секундного интервала.

А вот проблема в том, что тест всегда занимает больше времени. Например, для выполнения всех запросов требуется около 3 минут, а средний ответ от сервера составляет около 50 мс.

Как я могу настроить JMeter или что я должен использовать, чтобы гарантировать, что все вызовы API 500k выполняются в течение 5-секундного интервала?

Это пример вывода от мастера:

Starting remote engines
Starting the test @ Thu Nov 08 18:28:02 UTC 2018 (1541701682517)
summary +      1 in 00:00:00 =    4.8/s Avg:   106 Min:   106 Max:   106 Err:     0 (0.00%) Active: 76 Started: 24 Finished: 0
summary + 286890 in 00:00:27 = 10817.9/s Avg:    66 Min:    44 Max:  1363 Err:     0 (0.00%) Active: 2837 Started: 22851 Finished: 25632
summary = 286891 in 00:00:27 = 10732.9/s Avg:    66 Min:    44 Max:  1363 Err:     0 (0.00%)
summary +  40389 in 00:00:30 = 1344.8/s Avg:    67 Min:    45 Max:  1630 Err:     0 (0.00%) Active: 6607 Started: 27937 Finished: 24366
summary = 327280 in 00:00:57 = 5765.6/s Avg:    66 Min:    44 Max:  1630 Err:     0 (0.00%)
summary +  47986 in 00:00:30 = 1600.6/s Avg:    70 Min:    45 Max:  1618 Err:     0 (0.00%) Active: 2847 Started: 70360 Finished: 70549
summary = 375266 in 00:01:27 = 4326.1/s Avg:    67 Min:    44 Max:  1630 Err:     0 (0.00%)
summary +   8420 in 00:00:31 =  274.6/s Avg:    62 Min:    45 Max:   335 Err:     0 (0.00%) Active: 1231 Started: 77129 Finished: 78934
summary = 383686 in 00:01:57 = 3267.9/s Avg:    66 Min:    44 Max:  1630 Err:     0 (0.00%)
summary +   9173 in 00:00:30 =  305.1/s Avg:    59 Min:    45 Max:  1107 Err:     0 (0.00%) Active: 166 Started: 80976 Finished: 83846
summary = 392859 in 00:02:27 = 2663.8/s Avg:    66 Min:    44 Max:  1630 Err:     0 (0.00%)
Remote engines have been started
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary + 107131 in 00:01:11 = 1504.3/s Avg:    72 Min:    45 Max:  1230 Err:     0 (0.00%) Active: -484 Started: 86185 Finished: 88700
summary = 499990 in 00:03:39 = 2286.2/s Avg:    68 Min:    44 Max:  1630 Err:     0 (0.00%)
Tidying up remote @ Thu Nov 08 18:31:41 UTC 2018 (1541701901996)

А вот так выглядит тест JMeter enter image description here

1 Ответ

0 голосов
/ 09 ноября 2018

Существует одна подходящая опция: Таймер формирования пропускной способности и Группа потоков параллелизма комбинация. Их можно соединить с помощью Функция обратной связи по расписанию , поэтому JMeter запустит дополнительные потоки, если текущего количества недостаточно для выполнения требуемой нагрузки.


Общие рекомендации:

Давайте немного уменьшим масштаб, вам нужно убедиться, что 1 сервер может отправлять 1000 запросов за 5 секунд или 200 запросов в секунду. Это означает, что время отклика вашего сервера должно составлять 5 миллисекунд (включая время установления соединения и запросы на перемещение туда и обратно). Насколько я вижу, минимальное время отклика для вашей установки составляет 45 миллисекунд, а максимальное достигает 1,6 секунды. Следовательно, похоже, что вы не сможете достичь желаемой пропускной способности, используя текущие настройки.

Теперь вам нужно определить причину, вот несколько подсказок:

  1. У вас есть 5 секунд, это означает, что последние 200 пользователей будут запущены на 5-й секунде вашего теста, в любом случае это займет больше 5 секунд
  2. Amazon T3 medium - это двухъядерный компьютер с 4 ГБ оперативной памяти. Теоретически этого должно быть достаточно, чтобы запустить 1000 пользователей, однако это зависит от размера запроса / ответа. Убедитесь, что движки JMeter не перегружены с помощью Amazon CloudWatch или JMeter PerfMon Plugin
  3. Попробуйте запустить тест дольше с более продолжительным временем разгона, это может дать вашему приложению возможность "прогреться", и вы сможете определить точку насыщения - максимальное количество пользователей. которое ваше приложение может поддерживать без снижения производительности
...