Thank you for reading this post, don't forget to subscribe!
Установка Yandex.Tank
При желании, вы можете установить Yandex.Tank из пакетов, либо запустить из исходников. Он написан на Python, так что к нему понадобится еще пачка модулей. Я же предпочитаю запускать его в Docker. Это в разы удобнее и быстрее.
Для начала установите себе докер, После этого создаем директорию для данных танка и кладем туда конфиг нагрузочного теста для сайта.
1 2 |
# mkdir ~/yandex.tank # touch load.yaml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
overload: enabled: true package: yandextank.plugins.DataUploader token_file: "token.txt" phantom: address: www.rambler.ru:443 header_http: "1.1" headers: - "[Host: www.rambler.ru]" - "[Connection: close]" uris: - / - /sport/ load_profile: load_type: rps schedule: line(5, 30, 1m) ssl: true autostop: autostop: - http(5xx,10%,5s) console: enabled: true telegraf: enabled: false |
token.txt | Текстовый файл с токеном от overload.yandex.net. |
www.rambler.ru:443 | Адрес сервера, который будем тестировать. Причем это не адрес сайта, так как это доменное имя просто резолвится в ip адрес. Можно задать сразу в виде ip. |
Host: www.rambler.ru | Http заголовок, в котором мы передаем имя сайта, который будем нагружать. |
/, /sport/ | Урлы сайта, к которым по очереди будем обращаться. В данном случае это главная страница и страница /sport. Этот список может быть указан через текстовый файл. Подробности смотрите в документации. |
line(5, 30, 1m) | Тип нагрузки. В данном случае это линейный рост запросов с 5 до 30 в течении одной минуты. |
http(5xx,10%,5s) | Условие автоматической остановки теста. В данном случае тест завершится сам, если в течении 5 секунд будет 10% пятисотых ошибок. |
Создадим текстовый файл с токеном:
1 |
# touch token.txt |
Не забудьте записать туда токен. Подготовку закончили, можно приступать к тестированию.
Запуск нагрузки на сайта с помощью Yandex.Tank
Запускаем Yandex.Tank:
1 2 |
# cd ~/yandex.tank # docker run --rm -v ~/yandex.tank:/var/loadtest -it direvius/yandex-tank |
Ждем окончания тестирования. Если укажите очень большую нагрузку, например в тысячи rps, можете повесить виртуалку или сайт (хе-хе). Вывод работы танка будет примерно такой.
В нагрузочном тестировании сайта нас в первую очередь интересует время отклика. Где его можно оценить, я выделил на скриншоте. После того, как завершится тест, в завершающем выводе работы контейнера будет ссылка на overload, где вы сможете посмотреть результат через браузер.
Пройдя по ней вы сможете более детально изучить поведение сайта под нагрузкой
Например, на приведенном результате теста четко видно, как при приближении к 25-ти одновременным запросам начинает сильно расти время ответа сервера. На 20-ти запросах в 90-й перцентиль попадали все ответы менее 500 мс, а на 25-ти уже даже в 50-й перцентиль зашли ответы 750 мс.
Имеет смысл походить по вкладкам, там много другой полезной информации. С помощью данного тестирования вы сможете достаточно быстро определить предел производительности вашего железа.
Если хотите смоделировать более реальную нагрузку, а не синтетическую, то хорошенько поработайте над набором тестов и урлов. Можно очень гибко все это настроить. Например, добавить post запросы, где-то нарастающую нагрузку сделать, а где-то постоянную. Все это описано в документации. Там есть сильно навороченные примеры.