Locust.io: Контроль параметра запроса в секунду

Я пытался загрузить тестовый сервер API с помощью Locust.io на экземплярах, оптимизированных для вычислений EC2. Он предоставляет простой в настройке параметр для установки времени ожидания последовательного запроса и количества одновременных пользователей. Теоретически rps = время ожидания X #_users. Однако во время тестирования это правило не работает для очень низких пороговых значений #_users (в моем эксперименте около 1200 пользователей). Переменные hatch_rate, #_of_slaves, включая настройку распределенного теста, практически не повлияли на rps.

Информация об эксперименте

Тест проводился на вычислительном узле C3.4x AWS EC2 (образ AMI) с 16 виртуальными ЦП, твердотельным накопителем General и 30 ГБ ОЗУ. Во время теста загрузка ЦП достигла максимума 60% (зависит от скорости вывода, которая контролирует параллельные порождаемые процессы), в среднем оставаясь ниже 30%.

Locust.io

setup: использует pyzmq и настраивает каждое ядро ​​vCPU как подчиненное устройство. Настройка одиночного запроса POST с телом запроса ~ 20 байтов и телом ответа ~ 25 байтов. Частота отказов запросов: ‹1%, при среднем времени ответа 6 мс.

переменные: время между последовательными запросами, установленное на 450 мс (мин: 100 мс и макс: 1000 мс), скорость вывода при удобных 30 в секунду и RPS, измеряемых при изменении #_users.

График пропускной способности Locust.io

RPS следует уравнению для 1000 пользователей. Увеличение #_users после этого имеет убывающую отдачу с пределом, достигнутым примерно на 1200 пользователей. #_users здесь не независимая переменная, изменение времени ожидания также влияет на количество запросов в секунду. Однако изменение настройки эксперимента на 32 ядра (экземпляр c3.8x) или 56 ядер (в распределенной настройке) вообще не влияет на RPS.

Так действительно, как можно контролировать RPS? Есть ли что-то очевидное, что мне здесь не хватает?


person sidi    schedule 30.12.2014    source источник


Ответы (1)


(здесь один из авторов Locust)

Во-первых, почему вы хотите контролировать RPS? Одна из основных идей Locust - описать поведение пользователя и позволить этому генерировать нагрузку (запросы в вашем случае). Вопрос, на который Locust призван ответить: Сколько одновременных пользователей может поддерживать мое приложение?

Я знаю, что есть соблазн выбрать определенное количество запросов в секунду, и иногда я также «обманываю», стремясь получить произвольное количество запросов в секунду.

Но отвечая на ваш вопрос, уверены ли вы, что ваша саранча не окажется в тупике? Например, они выполняют определенное количество запросов, а затем становятся бездействующими, потому что у них нет других задач для выполнения? Трудно сказать, что происходит, не видя тестового кода.

Распределенный режим рекомендуется для более крупных производственных установок, и большинство реальных нагрузочных тестов, которые я проводил, проводились на нескольких, но меньших экземплярах. Но это не имеет значения, если вы не загружаете процессор на максимум. Вы уверены, что не перегружаете одно ядро ​​процессора? Не уверен, какая у вас ОС, но если Linux, какова ваша нагрузка?

person cgbystrom    schedule 31.12.2014
comment
Одна из причин, по которой я стремлюсь к RPS, связана с тем, что я знаю пользователей (например, 2), но для саранчи 2 пользователя генерируют запрос на 110+ RPS, но в реальном мире эти 2 пользователя могут делать только 1-2 запроса в секунду? Как это помогает при определении пользовательской нагрузки? - person ashutosh; 25.05.2021