Как стать автором
Обновить

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

Яндекс.Танк нынче уже не популярен? Было бы интересно его с пушкой BFG сравнить с тем же локустом, но у меня руки не доходят(

Незаслуженно забыты 2 отличных инструмента:

1. https://github.com/artilleryio/artillery — js, конфиг через yaml. Очень шустрый. Куча возможностей из коробки.
2. https://github.com/aliostad/SuperBenchmarker — констольный под win, mac. Простой и быстрый, строит красивые графики. Конфиг ключами.

Интересное сравнение, спасибо.

Времена отклика на графиках в миллисекундах?

В скрипте Gatling вижу проблему - неправильно использован pacing. Установлено значение 2мс, однако запросы выполняются дольше, что приводит к снижению интенсивности и поэтому cpu не утилизируется выше 65%. Можно попробовать провести повторный тест с pacing 40мс и до 1500 конкурентных сценариев или выше (желательно установить pacing выше максимального времени выполнения сценария и расчитать число конкурентных сценариев соответственно).

Если нет необходимости в закрытой модели нагрузки, то можно использовать открытую модель, тогда не придётся расчитывать и использовать pacing.

Если интересует именно RPS, можно также включить общий пул подключений, что позволит ещё немного увеличить интенсивность.

Было бы интересно увидеть насколько изменятся результаты)

Времена отклика в миллисекундах, по поводу увеличения конкурентных сценариев, изначально так и делал, производительность была сильно ниже, но вот про общий пул подключений интересная идея, думаю должно помочь, спасибо!

По бест-практис всё-таки стоит разделять генератор и тестируемое приложение. CPU steal time 95+ процентов в явном виде указывает, что виртуалка находится в ожидании выполнения на хосте. Хоть тулы были примерно в равных условиях, проводить сравнение в такой конфигурации, имхо, некорректно.

Так они же и разделены, генератор нагрузки на виртуалке, тестируемое приложение на хост машине, конечно они могут влиять друг на друга, но и в реальной жизни такое возможно, когда виртуальная машина генератора нагрузки и приложения нарезаны с одной хост-машины. По поводу CPU steal time 95+, моя вина, подложил не очень очевидный график, он показывает значение в стеке и накладывает друг на друга нулевые графики. В реальности steal time максимум 0,782%

Сравнение явно полезное, но из коробки k6 поддерживает намного больше протоколов: https://k6.io/docs/using-k6/protocols/ и для k6 лучше было использовать сценарии (https://k6.io/docs/using-k6/scenarios/executors/), а не старую модель со stages/target - предполагаю, что у вас получились бы совсем другие числа.

Спасибо! По-возможности попробую.

Для locust не совсем верное тестирование, в виду его однопоточной python жизни, необходимо запускать slave ноды: http://docs.locust.io/en/stable/running-distributed.html по количеству CPU, как раз для их утилизации

Для тестирования использовалась версия k6 v0.36.0. Использовался примерно такой же подход к формированию скрипта пауза между итерациями 10 мс. Запуск 200 виртуальных пользователей за 10 минут.

А в чём смысл такого теста производительности инструмента, если она искусственно ограничивается через задержки?

Не могу однозначно сказать за другие инструменты, т.к. плотно использовал только Tsung, который не представлен в этом сравнении. Но последнее время активно смотрю в сторону K6, периодически тестирую его и считаю очень перспективным. Поэтому такой низкий результат меня сильно удивил.

Попробовал частично воспроизвести тест на двух облачных виртуалках. Если просто закомментировать sleep в вашем сценарии k6, получается прирост с 8.6k rps до 41K rps.

Задержки устанавливаются не для искуственного ограничения, а для управляемого и предсказуемого роста нагрузки, все таки это важно при тестировании производительности. Честно сказать, результат K6 меня тоже удивил, возможно у меня были какие то ошибки при его использовании, но пока не понятно какие. В моем случае без задержки K6 быстро съедает все ресурсы виртуалки и начинает вести себя нестабильно, при этом результат не сильно меняется.

Это интересно. Не очень понятно, как такой тип теста (closed-model, с лимитированным количеством юзеров) может начинать вести себя нестабильно, разве что значение "max users" выбрано слишком большим для тестового окружения.

В любом случае, использовать искусственную задержку неправильно для такого вида теста, иначе не понятно, производительность чего в итоге тестируется? Учитывая, что в концу теста у нас 200 virtual users в цикле посылают запросы и ждут 0.01 секунду, то общее число итераций в секунду даже без отправки запросов может быть максимум

1/0.01*200 = 20000

Если спать 0.02 секунды, получим 10000. Вопрос - а при чём здесь k6 тогда? :)

P.S. Полная копия вашего 10-ти минутного теста с закоментированным sleep выдает 45K reqs/s без единой ошибки.

1/0.01*200 = 20000

В том то и дело, что даже 20к не получилось. Да конкретный сценарий больше 20к не может выдать, но даже если указать ему не 200, а 2000 или 20000 вюзеров, результат не изменится.

P.S. Полная копия вашего 10-ти минутного теста с закоментированным sleep выдает 45K reqs/s без единой ошибки.

Тут уже вопрос в каком окружении и сколько ресурсов ему для этого понадобилось, у меня все инструменты запускались в одинаковой, ограниченной среде.

Спасибо за K6, надо посмотреть на него внимательнее.
В своей не очень широкой практике использовал еще вот такое:
1) wrk https://github.com/wg/wrk для совсем простой нагрузки, зато выдает 100K+ RPS
2) pandora https://github.com/yandex/pandora - пушка от яндекс-танка на Go, есть сценарии
3) molotov https://molotov.readthedocs.io/en/stable/ - минифреймворк на Python/asyncio для сценариев со сложной логикой
И да, как уже упоминалось, при замерах RPS имеет смысл физически разделять хосты - источники и приемники нагрузки, чтобы не возникало никакой конкуренции за ресурсы (источник на хост-системе, приемник в виртуалке - это немного не то)

Попробуйте для Locust использовать FastHttpUser вместо обычного HttpUser. Также, если запустить в распределенном режиме (для 4-ядерного процессора - это 1 мастер и 3 воркера), результаты будут не такими скромными :)

Апаче хорош!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории