пятница, 4 января 2013 г.

Prfomance 2


Во-первых, нам нужна сама утилита для нагрузочного тестирования веб-серверов. Мы остановили наш выбор на siege - это простой и при этом очень мощный инструмент. Во-вторых, нам нужна программа, отображающая текущую загрузку системы, для этих целей мы будем использовать htop (это более продвинутый вариант классической утилиты top).

Обе программы есть в стандартном репозитории, следовательно установка выглядит так:



apt-get install siege htop
5.2 htop

Интерфейс htop очень прост: Верхняя часть поделена на две зоны: слева отображается загрузка ядер CPU, использование памяти и swap, справа: информация по числу процессов, LoadAvarage (за 1, 5 и 15 минут) и общий uptime системы. В нижней части список процессов с наиболее полезной информацией по ним (использование CPU, памяти и т.д.).

При работе с программой удобнее всего включить сортировку процессов по утилизации CPU (наиболее "жадные" сверху) и всё время обращать внимание, на соотношение использования CPU и текущего LoadAvarage.

Для примера: если загрузка процессора далека от максимальной, память ещё не заканчивается, но при этом LoadAvarage через чур высок, то, скорее всего, узким местом является обращение к жёсткому диску (а в связке nginx+php+mysql именно последний наиболее активно его использует). Следовательно в этом случае нужно обратить больше внимания настройке mysql.

5.3 Siege

Для начала краткое описание опций программы, которые мы будем использовать:

-с <число> -- число одновременно запускаемых запросов;
-f <файл> -- файл содержащий набор ссылок, по которым будет обращаться программа во время тестирования;
-i -- режим "internet", в этом режиме программ случайно выбирает адреса для запросов, список адресов задаётся параметром -f;
-b -- режим "benchmark", все тесты при этом запускаются без пауз;
-t -- время тестирования.

Перевод документации на русский можно найти здесь: http://habrahabr.ru/blogs/webdev/65128/ .

В простейшем случае тестирование можно запустить так:

siege <url>
При этом в несколько потоков будет обращение к одному единственному <url>. Такой режим хоть и имеет определённый смысл, но сильно уступает варианту, когда программа в произвольном порядке обращается к различным адресам сайта. И здесь возникает вопрос: как получить карту сайта в формате, понимаемом, siege?

Почти все CMS (drupal не исключение) имеют встроенную функцию генерации файла sitemap.xml, для того чтобы его получить достаточно воспользоваться командой:

wget http://<домен сайта>/sitemap.xml

Для преобразования этого файла в формат siege мы воспользуемся одним из рецептов доступных по этой ссылке. А именно создадим файл sitemap2list.sh следующего содержания:

#! /bin/sh
sed -r 's/<loc/\n<loc/g; s!</loc>!</loc>\n!g' $1 | sed -r -n '/<loc>.*?<\/loc>/! D; /<loc>.*?<\/loc>/ s!</?loc>!!g; s!\s+!!g; P'
Не забываем установить права на исполнение:

chmod 755 sitemap2list.sh
После этого преобразование выполняется следующей командой:

./sitemap2list.sh sitemap.xml > usrl.txt
Файл urls.txt получен, теперь можно запускать само тестирование:

siege -i -b -f urls.txt
5.4 Подбор числа обработчиков php-fpm

При подборе параметров мы воспользовались следующим методом (возможно это даже наше know-how):

Устанавливаем для php-fpm в качестве максимального числа обработчиков (параметр pm.max_children) заведомо большое значение, мы использовали 20.
Производим набор тестов следующего вида:
siege -i -b -t 1m -с <num> -f urls.txt
При каждом новом тесте мы будем увеличивать <num> на 1 (т.е. при первом тесте <num> = 1, при втором 2 и т.д.). По достижении определённого значения <num> (у нас это было 8) число обработанных запросов в секунду начнёт уменьшаться, значит нам нужно выбрать значении предыдущего тестирования (для нас это 7) в качестве максимального числа обработчиков.

5.5 Пример для MySQLTuner

Для стресс-тестирования во время настройки MySQLTuner мы пользовались следующей командой:

siege -i -b -t 2m -f urls.txt

http://pastebin.com/ZkY99qFe

Комментариев нет:

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