290 likes | 607 Views
Обзор инструментов нагрузочного тестирования. Александр Демидов « 1С-Битрикс». Нагрузочное тестирование –.
E N D
Обзор инструментов нагрузочного тестирования Александр Демидов «1С-Битрикс»
Нагрузочное тестирование – определение или сбор показателей производительности и времени отклика программно-технической системы или устройства в ответ на внешний запрос с целью установления соответствия требованиям, предъявляемым к данной системе (устройству)./ Википедия
Зачем? Проверка и оптимизация конфигурации оборудования, виртуальных машин, серверного программного обеспечения Оценка максимальной производительности, которую способен выдерживать проект с типовыми сценариями нагрузки на доступных ресурсах Влияние модулей проекта на производительность, сценарии обработки пиковой нагрузки Оценка стабильности при максимальных нагрузках при проведении 24-часовых тестов с учетом внешних факторов (импорты, резервное копирование и т.п.) Выявление ограничений конфигурации, определение методов дальнейшего масштабирования и оптимизации
Только определив требования вместе с заказчиком Если сам заказчик не сумеет определиться с требованиями, помогите ему. Количество хитов в сутки Скорость загрузки главной страницы при указанном количестве хитов Скорость загрузки критичных разделов Среднее время загрузки всех страниц в сутки Процент страниц с временем загрузки более n сек. Допустимый процент ошибок Допустимое время простоя ...
Начнем с простого… Apache HTTP server benchmarking tool ab[options] [http[s]://]hostname[:port]/path где основные необходимые options: -c concurrency количество одновременных запросов к серверу (по уолчанию 1) -n requests общее количество запросов (по умолчанию 1)
ab Concurrency Level: 10 Time taken for tests: 0.984 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 3725507 bytes HTML transferred: 3664100 bytes Requests per second: 101.60 [#/sec] (mean) Time per request: 98.424 [ms] (mean) Time per request: 9.842 [ms] (mean, across all concurrent requests) Transfer rate: 3696.43 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 1 2 3.6 1 23 Processing: 63 94 21.5 90 173 Waiting: 57 89 21.6 84 166 Total: 64 96 21.5 92 174
ab Плюсы: Есть везде, где есть Apache Не требует никакой дополнительной настройки Очень простой инструмент Минусы: Очень простой инструмент По сути – тестирует только производительность веб-сервера: опрашивает только один URL, не поддерживает сценарии нагрузки
Чуть сложнее – Siege Joe Dog Software http://www.joedog.org/siege-home/ Многопоточный Можно задавать как количество запросов, так и продолжительность (время) тестирования Поддерживает простейшие сценарии
Siege # cat urls.txt # URLS file for siege # -- http://www.bitrix24.ru/ http://www.bitrix24.ru/support/forum/forum1/topic3469/?PAGEN_1=2 http://www.bitrix24.ru/register/reg.php POST domain=test&login=login http://www.bitrix24.ru/search/ POST < /home/www/siege_post_data # siege -f urls.txt -c 10 -r 10-d 3
Siege HTTP/1.1 200 0.44 secs: 12090 bytes ==> GET / HTTP/1.1 200 0.85 secs: 29316 bytes ==> GET /support/forum/forum1/ HTTP/1.1 200 0.85 secs: 29635 bytes ==> GET /support/forum/forum1/ HTTP/1.1 200 0.34 secs: 12087 bytes ==> GET / [...] done. Transactions: 100 hits Availability: 100.00 % Elapsed time: 12.66 secs Data transferred: 1.99 MB Response time: 0.64 secs Transaction rate: 7.90 trans/sec Throughput: 0.16 MB/sec Concurrency: 5.02 Successful transactions: 100 Failed transactions: 0 Longest transaction: 1.06 Shortest transaction: 0.31
Боевые сценарии тестирования URL’ы для сценариев можно взять из логов веб-сервера
Похожий инструмент - httperf http://www.hpl.hp.com/research/linux/httperf/ 30 Jan 2008: visit our sourceforgepage athttp://sourceforge.net/projects/httperf http://sourceforge.net/projects/httperf/ As of 2009-12-24, this project may now be found at http://code.google.com/p/httperf/. https://code.google.com/p/httperf/ 2013-05-28 - Ted Bullock Figured out my lost account to access the httperf repository. Although I am not currently doing active development for httperf, you can now submit bug reports and I will be able to receive them.
Сложнее… и функциональнее Apache JMeterhttp://jmeter.apache.org/ Java HTTP, HTTPS, SOAP, Database via JDBC, LDAP, SMTP(S), POP3(S), IMAP(S) Консоль и GUI Распределенное тестирование План тестирования – XML Может обрабатывать лог веб-сервера как план тестирования Визуализация результатов в GUI
Tsung http://tsung.erlang-projects.org/ Erlang HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP, Jabber/XMPP Консоль (GUI через сторонний плагин) Распределенное тестирование (миллионы пользователей) Фазы тестирования План тестирования – XML Запись плана с помощью Tsung recorder’а Мониторинг тестируемых серверов (Erlang, munin, SNMP) Инструменты для генерации статистики и графиков из логов работы
WAPT http://www.loadtestingtool.com/ Windows Платный (есть триал на 30 дней / 20 виртуальных пользователей) Запись плана тестирования из десктопных и мобильных браузеров Зависимости в планах тестирования (последующий URL в зависимости от ответа сервера) Имитации реальных пользователей (задержки между соединениями, ограничение скорости соединений)
Не забываем о родных инструментах
Инструменты тестирования в «Битриксе»
Нюансы… Полноценные длительные нагрузочные тесты проводите в близких к «боевым» условиях (импорты, бэкапы и т.п.) Проводите тесты на полном наборе данных В идеале – распределенные тесты Совсем в идеале – территориально распределенные Каким бы идеальным не был сценарий – он будет лишь «искусственным» повторением боевой нагрузки
Например, влияние «Веб-аналитики» • На 12-часовом тесте – значительно падение скорости генерации страниц: • потребление mysqld до 120% ядра CPU • load average – до 12-13
«Веб-аналитика» Максимальное время выполнения у запроса к B_STAT_SESSION, который выполняется по индексу (IP_FIRST_NUMBER,DATE_STAT типа Date). Генерация нагрузки – с одного IP адреса. Соответственно индекс обладал нулевой избирательностью. Для исправления ситуации (приближения к реальной жизни), изменим случайным образом данные в таблице B_STAT_SESSION: mysql > updateb_stat_sessionset IP_FIRST_NUMBER = FLOOR(1520000000 + RAND() * (232669));
Резюме Обязательно проводите полноценное нагрузочное тестирование перед стартом проекта В процессе эксплуатации быстро определить «запас» «узких» мест можно с помощью простых инструментов (ab, встроенный тест «Битрикса») Для полноценных тестов – инструменты, максимально близко имитирующие пользователей Перед выкладыванием апдейтов на «бой» проводите нагрузочные тесты Чем серьезнее меняется логика приложения – тем тщательнее должен быть тест (в идеале – полноценный суточный) Проводите тесты, имея настроенную систему мониторинга
Спасибо за внимание! Вопросы? Александр Демидов demidov@1c-bitrix.ru +7-926-521-3700 @demidov http://www.1c-bitrix.ru