yandex.tank
Яндекс.Танк - это инструмент для проведения нагрузочного тестирования и анализа производительности веб-сервисов и приложений.
Основные возможности:
встроенный мониторинг ресурсов тестируемого сервера по протоколу SSH;
авто-стоп теста по конфигурируемым критериям, например, если время отклика сервера превышает заданный порог;
вывод результатов в консоль и в виде графиков;
открытая архитектура позволяет расширять функциональность инструмента собственными модулями.
Яндекс.Танк был разработан в Яндексе в 2006 году для измерения показывающей части баннерной системы. Сейчас он один из основных инструментов измерения производительности.
Установка: если вы обладатель убунты, вам нужно просто выполнить несколько команд:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:yandex-load/main
sudo apt-get update
sudo apt-get install yandex-load-tank-base
В противном случае вам прийдется сделать больше телодвижений:
Сначала нужно убедиться, что в системе установлены пакеты python-psutil, python-ipaddr, python-progressbar, python-lxml.
Затем нужно забрать по адресу 64-битного репозитария
бинарную сборку, состоящую из 2 пакетов - сам яндекс-танк и фантом.
Фантом - это веб-сервер, он же высокопроизводительный асинхронный генератор нагрузки ,
при помощи которого возможно генерировать десятки тысяч HTTP-запросов в секунду, написан на с++.
Можно забрать эти два бинаргых пакета также у меня: phantom-0.14.0-pre44.1.el6.x86_64.rpm
и yandex-tank-1.4.6-8.noarch.rpm.
После установки этих двух пакетов можно приступать к тестированию. Создаем папку test. В папке создаем файл load.ini, который состоит из секций
и параметров. Содержание файла load.ini:
[phantom]
address=localhost
port = 80
rps_schedule = const (1,50s) line (1, 40, 1m) step (40, 1, 5, 8s).
uris = /
/search.html
headers = [Host localhost]
В качестве адреса можно использовать как ip-шник, так и полное доменное имя.
Танк позволяет создать 3 вида нагрузки:
Постоянная – указывается количество запросов и время
Линейный рост – указывается начальное и конечное значение и время
Рост шагами – указывается начальное и конечное значение, шаг увеличения нагрузки и время.
Причём эти виды нагрузки можно комбинировать в одном тесте.
В следующей строке описывается профиль нагрузки:
rps_schedule = const (1,50s) line (1, 40, 1m) step (40, 1, 5, 8s).
где:
const (1,50s) - постоянная нагрузка в один рпс в течение 50 секунд
line (1, 40, 1m) - линейно возрастающая нагрузка с 1 до 40 рпс в течение 1 минуты
step (40, 1, 5, 8s) - ступенчатое понижение нагрузки с 40 до 1 рпс с шагом в 5 рпс и длительностью каждого шага 8 секунд
uris - для тестов используем 2 страницы - корневую и поисковую
headers = [Host localhost] - отсылаемый заголовок
Теперь запускаем сам яндекс-танк:
> yandex-tank
После чего в консольном экране начинает выводиться информация:
Вот этот кусок вывода - усредненные значения таймингов - т.е. время на коннект и т.д. - в данном случае везде все очень быстро:
Avg Times (all / 14 RPS / last):
Overall: 0 / 0 / 0
Connect: 0 / 0 / 0
Send: 0 / 0 / 0
Latency: 0 / 0 / 0
Receive: 0 / 0 / 0
Cumulative Percentiles - накопительная часть. Times for 1 RPS - линейно возрастающая статистика.
HTTP for 14 RPS - агрегационная статистика по ошибкам и обьемам запросов.
В правой части экрана - информация о том, куда стреляем, какими патронами, какая нагрузка,
Сразу после запуска теста в веб-броузере можно открыть адрес http://localhost:8080/, где в режиме реального времени
можно смотреть процесс тестирования.
Все результаты складываются в текущую папку test
Для тестирования урлов по защищенному протоколу ssl можно использовать следующий сценарий:
[phantom]
address=remote_site:443
rps_schedule = line (1, 100, 1m) const (100, 1h).
ssl=1
uris = /
/search.html
headers = [Accept-Encoding:gzip]
[Cookie: some-cookies]
uris = /
Перед тем, как начинать тестировать сайт, расположенный не в локальной сети, а в удаленной,
сначала убедитесь в том, что путь не очень далек:
> traceroute remote_host
Дополнительная информация:
Википедия
Documentation
|