Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org

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

Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье