Интерпретация результатов нагрузочного тестирования...

23
Интерпретация результатов нагрузочного тестирования – что корректировать, где и как Сербул Александр Руководитель направления контроля качества интеграции и внедрений 1С-Битрикс

Upload: paytah

Post on 15-Jan-2016

51 views

Category:

Documents


2 download

DESCRIPTION

Интерпретация результатов нагрузочного тестирования – что корректировать, где и как. Сербул Александр Руководитель направления контроля качества интеграции и внедрений 1С-Битрикс. Популярные ошибки. Нет четкой цели – для чего. Просто: «а давайте нагрузим…» - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Сербул АлександрРуководитель направления контроля

качества интеграции и внедрений1С-Битрикс

Page 2: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Популярные ошибки

Нет четкой цели – для чего. Просто: «а давайте нагрузим…»

Нередко проводят нагрузочное тестирование –

неправильно, выводы - кривые

Получают кучу результатов – и не могут их растолковать

Неправильно представляют клиенту результаты

нагрузочного тестирования

Page 3: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Популярные ошибки - DDOS

Нагрузили систему, все вдруг стало колом, что делать?

Оказалось – безнадежно «задедосили» с ab.

Создаем разумную, похожую на боевую, нагрузку.

Очереди в nginx/php-fpm – не должны расти!

Система должна свободно дышать:

top

iostat –xm 5

Page 4: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Популярные ошибки – грузим одну страницу

Грузили только главную страницу (с включенным кэшем).

Пришли реальные пользователи и … система стала колом.

При нагрузке:

Нужно обращаться к разным страницам веб-системы.

Нужно загрузить демо-данные (реальный объем).

Важно авторизовывать хиты.

Проверяем производительность загрузки статики.

Page 5: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Подготовка – логи

Собираем логи:

Лог jmeter – latency запроса, код http

Лог nginx – latency общее, latency к upstream

Лог apache/php-fpm – latency, код http, system/user time,

memory

Лог ошибок php

Лог медленных запросов php-fpm - трейсы

Данные sar или atop – что творилось на сервере в это время

Page 6: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Подготовка – рисуем графикиВажно наблюдать картину в динамике на графиках:

munin/cacti/pnp4nagios:

Апач – запросы

Nginx – запросы

MySQL – запросы, потоки

Процессор – user/system/iowait

Память – использование и распределение

Своп – использование

Диски – latency, %util

Сеть – tcp, трафик

Page 7: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Подготовка - скриптыПолезно написать несколько скриптов обработки логов:

- Гистограмма времени запросов

- Гистограмма ошибок

- Гистограмма расхода памяти

Технологии: awk, bash, php. Скрипты - в блоге Битрикс на

Хабре или пишите нам.cat /var/log/www.access.log | awk -F# '{ zone = int($10/100)*100; hits[zone]++; } \

END { for (z in hits) {printf("%8s ms: %8s,%6.2f%

",z,hits[z],hits[z]/total*100);{s="";a=0;while(a++<int(hits[z]/total*100)) s=s"*";print s} } }' \

total="$TOTAL" - | sort -n

Page 8: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Понимание сценария выполнения хита

Очень важно понять, как проходит хит клиента к PHP:

1. Браузер клиента делает HTTP-запрос к nginx

2. nginx проксирует запрос к apache/php-fpm

3. PHP обращается к БД

4. PHP строит страницу и возвращает ее nginx

5. nginx в http-ответе возвращает ответ в браузер клиента

Будет понятно что «подкручивать».

Page 9: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Понимание сценария выполнения хита

1. Браузер клиента делает HTTP-запрос к nginx

Статика отдается, как правило, очень быстро или ищем причину.

nginx проксирует запрос (к upstream), ждет и возвращает:

200 ОК

500 Internal Server Error

502 Bad Gateway

503 Service Unavailable

504 Gateway Timeout

Page 10: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Понимание сценария выполнения хита

1. Браузер клиента делает HTTP-запрос к nginx

Нужно понять и вызубрить, какие статусы ошибок когда возвращаются:

- PHP выполнятся слишком долго (подкручиваем таймауты, смотрим

трейс php-fpm slow log …)

- PHP остановился с fatal error

- nginx не смог «достучаться» до apache/php (БД держит хит, сокет

наружу открылся …):

Apache mod_status, php-fpm pm.status_path, ps/top

Page 11: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Понимание сценария выполнения хита

2. nginx проксирует запрос к apache/php-fpm

Выбор upstream и время отработки запроса в нем – в лог

Недоступность upstream – забита очередь?

/server-status

netstat

atop/sar

Тормоза в БД = забивание очереди между nginx и apache/php-fpm

Page 12: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Понимание сценария выполнения хита

3. PHP обращается к БД

Логируем ошибки в БД:define("ERROR_EMAIL", "[email protected], [email protected]");

Лог медленных запросов к БД – анализируем.

График числа потоков в БД – максимум.

Траффик к БД – график.

График числа медленных запросов к БД.

Percona Server.

Page 13: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Понимание сценария выполнения хита

4. PHP строит страницу и возвращает ее nginx

Ошибки в логе PHP.

Лог медленных запросов php-fpm.

Поставьте pinba и рисуйте графики выполнения частей страницы php – где

тормозит?

Page 14: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Понимание сценария выполнения хита

5. nginx в http-ответе возвращает ответ в браузер клиента

Проверяем размер и сжатие в логах.

Проверяем статику – идет через nginx, в логах php – пусто.

Заглушка «200 ОК» вместо страницы? Бывает.

404 страница – статика или динамика?

Page 15: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Пошла нагрузка … жжж

Page 16: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Система работает в штатном режиме?

Не перегружена ли текущая веб-система?

/server-status (Apache mod_status)

Число ошибок и таймаутов в логах

Перегруженная текущая веб-система – не готова к нагрузке!

Page 17: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Система работает в штатном режиме?

nginx http_stub_status_moduleapachetop –f <лог nginx>, <лог apache>Число потоков в БД – разумноеЛог медл. запросов к БД – не растетmysql: show processlist – пусто (почти)CPU – нагрузка адекватнаяПамять – не уходит в swapТрафик к клиенту и БДНагрузка на диск

Перегруженная текущая веб-система – не готова к нагрузке!

Page 18: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Трактуем результаты - nginx

Считаем процент ошибок в логах: nginx

200 – 95%

50x – 5% - почему? «подкручиваем»

Latency (200 OK) для статики: среднее, 90%, 99%,

распределение.

Время соед. с upstream > 1 сек?

Page 19: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Трактуем результаты – apache/php-fpm

% ошибок в логах apache/php-fpm:segfaults – бывает, но интересно почему? Ищем причины.

fatal errors – ??

warnings - ??

php-fpm slow log

latency (200 OK): cреднее, 90%, 99%, распределение

Исп. памяти > 500МБ??

Связываем с логом nginx

Page 20: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Трактуем результаты – БД

Число медл. запросов – откуда?

Пики числа потоков в БД

Анализ медленных запросов, оптимизация

Связываем с логом nginx

Page 21: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Трактуем результаты – для клиента

Число хитов (10 млн.)

Продолжительность тестирования (сутки)

Время построения страницы: среднее, 90%, 99% (0.3, 1.1, 1.8)

Распределение времени - гистограмма

Процент ошибок (0.2%) – клиенты получили страницу об ошибке

Красивые графики

Page 22: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Что и где «подкручивать»

Берем/подсматриваем в виртуальную машину Битрикс

Читаем курсы 1С-Битрикс

Сбалансированная конфигурация nginx->apache/php-fpm

Nginx – отдает статику, php - динамику

Адекватно настроенная БД

Оптимальные настройки PHP – прекомпилятор и др. (проверка в

админке Битрикс)

Аккуратная разработка на PHP, станд. компоненты, «Монитор

качества»

Page 23: Интерпретация результатов нагрузочного тестирования – что корректировать, где и как

Спасибо за внимание! Вопросы?Александр Сербул[email protected] AlexSerbul