240 likes | 470 Views
Интерпретация результатов нагрузочного тестирования – что корректировать, где и как. Сербул Александр Руководитель направления контроля качества интеграции и внедрений 1С-Битрикс. Популярные ошибки. Нет четкой цели – для чего. Просто: «а давайте нагрузим…»
E N D
Интерпретация результатов нагрузочного тестирования – что корректировать, где и как Сербул Александр Руководитель направления контроля качества интеграции и внедрений 1С-Битрикс
Популярные ошибки Нет четкой цели – для чего. Просто: «а давайте нагрузим…» Нередко проводят нагрузочное тестирование – неправильно, выводы - кривые Получают кучу результатов – и не могут их растолковать Неправильно представляют клиенту результаты нагрузочного тестирования
Популярные ошибки - DDOS Нагрузили систему, все вдруг стало колом, что делать? Оказалось – безнадежно «задедосили» с ab. Создаем разумную, похожую на боевую, нагрузку. Очереди в nginx/php-fpm – не должны расти! Система должна свободно дышать: top iostat –xm 5
Популярные ошибки – грузим одну страницу Грузили только главную страницу (с включенным кэшем). Пришли реальные пользователи и … система стала колом. При нагрузке: Нужно обращаться к разным страницам веб-системы. Нужно загрузить демо-данные (реальный объем). Важно авторизовывать хиты. Проверяем производительность загрузки статики.
Подготовка – логи Собираем логи: Лог jmeter – latency запроса, код http Лог nginx – latency общее, latency к upstream Лог apache/php-fpm – latency, код http, system/user time, memory Логошибок php Лог медленных запросов php-fpm - трейсы Данные sarили atop – что творилось на сервере в это время
Подготовка – рисуем графики Важно наблюдать картину в динамике на графиках: munin/cacti/pnp4nagios: Апач – запросы Nginx – запросы MySQL – запросы, потоки Процессор – user/system/iowait Память – использование и распределение Своп – использование Диски – latency, %util Сеть – tcp, трафик
Подготовка - скрипты • Полезно написать несколько скриптов обработки логов: • Гистограмма времени запросов • Гистограмма ошибок • Гистограмма расхода памяти • Технологии: 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
Понимание сценария выполнения хита Очень важно понять, как проходит хит клиента к PHP: Браузер клиента делает HTTP-запрос к nginx nginxпроксирует запрос к apache/php-fpm PHP обращается к БД PHP строит страницу и возвращает ее nginx nginx в http-ответе возвращает ответ в браузер клиента Будет понятно что «подкручивать».
Понимание сценария выполнения хита Браузер клиента делает HTTP-запрос к nginx Статика отдается, как правило, очень быстро или ищем причину. nginxпроксирует запрос (к upstream), ждет и возвращает: 200 ОК 500 Internal Server Error 502 Bad Gateway 503 Service Unavailable 504 Gateway Timeout
Понимание сценария выполнения хита • Браузер клиента делает HTTP-запрос к nginx • Нужно понять и вызубрить, какие статусы ошибок когда возвращаются: • PHP выполнятся слишком долго (подкручиваем таймауты, смотрим трейсphp-fpm slow log …) • PHP остановился с fatal error • nginxнесмог «достучаться» до apache/php (БД держит хит, сокет наружу открылся …): • Apache mod_status, php-fpm pm.status_path, ps/top
Понимание сценария выполнения хита 2. nginxпроксирует запрос к apache/php-fpm Выбор upstream и время отработки запроса в нем – в лог Недоступность upstream – забита очередь? /server-status netstat atop/sar Тормоза в БД = забивание очереди между nginxи apache/php-fpm
Понимание сценария выполнения хита 3. PHP обращается к БД Логируем ошибки в БД: define("ERROR_EMAIL", "admin@site.ru, support@site.ru"); Лог медленных запросов к БД – анализируем. График числа потоков в БД – максимум. Траффик к БД – график. График числа медленных запросов к БД. Percona Server.
Понимание сценария выполнения хита 4. PHP строит страницу и возвращает ее nginx Ошибки в логе PHP. Лог медленных запросов php-fpm. Поставьте pinbaи рисуйте графики выполнения частей страницы php – где тормозит?
Понимание сценария выполнения хита 5. nginx в http-ответе возвращает ответ в браузер клиента Проверяем размер и сжатие в логах. Проверяем статику – идет через nginx, в логах php – пусто. Заглушка «200 ОК» вместо страницы? Бывает. 404 страница – статика или динамика?
Система работает в штатном режиме? Не перегружена ли текущая веб-система? /server-status (Apache mod_status) Число ошибок и таймаутов в логах Перегруженная текущая веб-система – не готова к нагрузке!
Система работает в штатном режиме? nginxhttp_stub_status_module apachetop –f <лог nginx>, <лог apache> Число потоков в БД – разумное Лог медл. запросов к БД – не растет mysql: show processlist – пусто (почти) CPU – нагрузкаадекватная Память – не уходит в swap Трафик к клиенту и БД Нагрузка на диск Перегруженная текущая веб-система – не готова к нагрузке!
Трактуем результаты - nginx Считаем процент ошибок в логах: nginx 200 – 95% 50x – 5% - почему? «подкручиваем» Latency (200 OK) для статики: среднее, 90%, 99%, распределение. Время соед. с upstream > 1 сек?
Трактуем результаты – apache/php-fpm % ошибок в логах apache/php-fpm: segfaults – бывает, но интересно почему? Ищем причины. fatal errors – ?? warnings - ?? php-fpm slow log latency (200 OK): cреднее, 90%, 99%, распределение Исп. памяти > 500МБ?? Связываем с логом nginx
Трактуем результаты – БД Число медл. запросов – откуда? Пики числа потоков в БД Анализ медленных запросов, оптимизация Связываем с логом nginx
Трактуем результаты – для клиента Число хитов (10 млн.) Продолжительность тестирования (сутки) Время построения страницы: среднее, 90%, 99% (0.3, 1.1, 1.8) Распределение времени - гистограмма Процент ошибок (0.2%) – клиенты получили страницу об ошибке Красивые графики
Что и где «подкручивать» Берем/подсматриваем в виртуальную машину Битрикс Читаем курсы 1С-Битрикс Сбалансированная конфигурация nginx->apache/php-fpm Nginx – отдает статику, php- динамику Адекватно настроенная БД Оптимальные настройки PHP – прекомпилятор и др. (проверка в админкеБитрикс) Аккуратная разработка на PHP, станд. компоненты, «Монитор качества»
Спасибо за внимание! Вопросы? Александр Сербулserbul@1c-bitrix.ruAlexSerbul