внедрения инновационного оборудования с высокой производительностью
Аудит производительности изнутри. Как самому...
Transcript of Аудит производительности изнутри. Как самому...
Аудит производительности изнутри. Как самому научиться следить за производительностью сайта
Евгений ПотаповITSumma
Александр ЛыженковAero
Партнерская конференция «1С-Битрикс»
Евгений Потаповгенеральный директор компании ITSumma
• Круглосуточное администрирование и техническая поддержка
веб-сайтов
• На поддержке CarambaTV, Наше Радио, Aero, Бюро Пирогова,
ПостНаука, Marketium, Travelata, AlterGeo, Invisible, VseMayki,
AcademMedia
• 100 миллионов уникальных посетителей в сутки
• Штат – 50 человек
Партнерская конференция 2015
#bitrixconf2015
Александр Лыженковтехнический директор компании Aero Creative Agency
• Специализируемся на создании, поддержке и развитии
технологичных e-commerce проектов. Выводим крупнейшие
ритейл-бренды в онлайн.
• Среди наших клиентов: «Евросеть», «Мегафон-Ритейл», ЦУМ,
«ЦентрОбувь», «Технопарк», «Техносила», «АльфаСтрахование»,
СГ МСК, «1С», «Уральские авиалинии», Yota Devices, Forex Club.
• Постоянный штат – 20 человек
Партнерская конференция 2015
#bitrixconf2015
Типичные проблемы поддержки• Долгое время ответа веб-сайта.
• Критическое потребление ресурсов сервера (CPU, диски)
• Рост нагрузки при скачках посещаемости
• Проблемы при выкладке нового кода
• Проблемы с «железом»
Партнерская конференция 2015
#bitrixconf2015
Содержание• Когда пришло время делать аудит?
• Как проводить аудит? Какой есть инструментарий?
• Пример проведения аудита
Партнерская конференция 2015
#bitrixconf2015
Когда нужно делать аудит?два «полюса» в разработке
• Сначала все сделаем и «зарелизим», а там – посмотрим
• Заранее спланировать код так, чтобы он был высокопроизводительным
Партнерская конференция 2015
#bitrixconf2015
«Быстро все сделаем»типичные проблемы
• Неоптимальный код на основе которого разработано много элементов сайта
• «Бомба замедленного действия» - неожиданное падение
производительности в процессе эксплуатации
• Плавное увеличение времени ответа с каждой новой «фичей»
Партнерская конференция 2015
#bitrixconf2015
Неоптимальный код на основе которого разработано много элементов сайта
Партнерская конференция 2015
#bitrixconf2015
Разработанная функциональность используется для
последующих доработок, и тогда, когда приходит
необходимость оптимизации кода – код уже очень не просто
изменить
Партнерская конференция 2015
#bitrixconf2015
«Бомба замедленного действия»Посещаемость выросла в 5 раз, а нагрузка на процессор – в 12
Партнерская конференция 2015
#bitrixconf2015
Время ответа незаметно увеличивается с каждой новой «фичей», пока не становится критическим
Как попытаться избежать проблем?Итеративный подход к аудиту
• Разрабатываем часть функциональности сайта
• Проводим аудит
• Дорабатываем самые «тормозные» моменты
• Разрабатываем дальше
• Проводим аудит
Партнерская конференция 2015
#bitrixconf2015
Аудит производительности – это не так сложно.
Состоит из:
• Аудита инфраструктуры
(Аудит серверного ПО и «железа», мониторинг)
• Аудита кода
(С использованием встроенного инструментария 1С-Битрикс)
• Аудита фронт-энда, скорость сайта
(Анализ времени загрузки страницы)
Партнерская конференция 2015
#bitrixconf2015
Аудит инфраструктурыКогда и как применять
• Цель – убедиться в том, что причина возможных проблем – не
«экосистема» сервера
• Чаще всего – в боевой эксплуатации.
• Часть 1: первичный анализ сервера
• Часть 2: мониторинг в течении продолжительного времени
Партнерская конференция 2015
#bitrixconf2015
Аудит инфраструктурыЧто анализируем? Факторы влияющие на время ответа сайта
• Специфика настройки веб-сервера.
• Нагрузка на процессор
• Нагрузка на дисковую подсистему
• Проблемы с работой базы данных
• Проблемы с сетевыми интерфейсами
Партнерская конференция 2015
#bitrixconf2015
Аудит инфраструктурыПервичный анализ.
Партнерская конференция 2015
#bitrixconf2015
• Какой хостинг использован?
Hetzner/FastVPS? Надо срочно проверить SMART состояние дисков.
• Каково значение TTL в DNS?
Оптимально <900 секунд. Больше – проблемы в случае срочного переезда.
Шаг 1. Анализ хостинга/DNS
Аудит инфраструктурыПервичный анализ.
Партнерская конференция 2015
#bitrixconf2015
• Какова частота процессора? Сколько ядер?
Если нужно быстро отдавать страницу пользователю – важна частота (>2.5 ггц)
Если нужно отдавать сайт многим одновременным пользователям важно
число ядер (как минимум >=4)
Шаг 2. Анализ аппаратной конфигурации - Процессор
Аудит инфраструктурыПервичный анализ.
Партнерская конференция 2015
#bitrixconf2015
• Каков тип жестких дисков – SATA или SSD?
Есть возможность поставить SSD? Если да – запланировать использование SSD
для базы данных.
Шаг 3. Анализ аппаратной конфигурации – Жесткие диски
Аудит инфраструктурыПервичный анализ.
Партнерская конференция 2015
#bitrixconf2015
Шаг 4. Анализ ПО сервера. Инструменты – проверка системы
Аудит инфраструктурыПервичный анализ.
Партнерская конференция 2015
#bitrixconf2015
• Open files limit (https://rtcamp.com/tutorials/linux/increase-open-files-limit/)
• PHP – убедиться что есть opcache (apc/zend opcache)
• PHP – убедиться, что память опкэш-акселератора не заполнена
• Nginx+apache? Убедиться в том, что статика отдается с nginx
• Nginx+apache? Убедиться в том, что стоит оптимальное количество worker
• Только apache? Поставить nginx.
• PHP-FPM? Проверить лимиты max_children
Шаг 5. Анализ настроек операционной системы и веб-части
Аудит инфраструктурыПервичный анализ.
Партнерская конференция 2015
#bitrixconf2015
Шаг 6. Настройки – Производительность – Сервер БД
Аудит инфраструктурыПервичный анализ.
Партнерская конференция 2015
#bitrixconf2015
Шаг 7. Дополнительные настройки бд
• Какова версия MySQL? Минимум 5.1 идеально >=5.5
• Таблицы – обязательно InnoDB
• innodb_file_per_table должен быть включен.
• innodb-flush-log-at-trx-commit выставить в 2
• Сервер под нагрузкой? Если да - Посчитать рекомендуемый innodb_log_size
(http://www.percona.com/blog/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/)
Аудит инфраструктурыПервичный анализ. Bonus-track
Партнерская конференция 2015
#bitrixconf2015
• Убедиться в том, что создание бэкапов работает
• Убедиться в том, что бэкапы создаются на внешний сервер
• Убедиться в том, что из бэкапов можно восстановиться
• Убедиться в том, что на сервере есть RAID контроллер
• Убедиться в том, что массив не RAID-0
• Убедиться в том, что массив не находиться в аварийном состоянии
Аудит инфраструктурыМониторинг в течении 24-48 часов
Партнерская конференция 2015
#bitrixconf2015
• Время ответа страниц сайта
• Число запросов в секунду на веб-сервер
• Нагрузка на процессор/Load Average
• Нагрузка на дисковую подсистему
• Работа web-сервера
• Работа MySQL
Аудит инфраструктурыТипичные примеры «серверных проблем» – код не виноват1. Периодическая нагрузка создаваемая кроном или агентами
Партнерская конференция 2015
#bitrixconf2015
Проблема: «Сайт иногда работает очень медленно».
Аудит инфраструктурыТипичные примеры «серверных проблем» – код не виноват1. Периодическая нагрузка создаваемая кроном или агентами
Партнерская конференция 2015
#bitrixconf2015
Число запросов при этом не растет.
Аудит инфраструктурыТипичные примеры «серверных проблем» – код не виноват1. Периодическая нагрузка создаваемая кроном или агентами
Партнерская конференция 2015
#bitrixconf2015
Причина: бэкап в кроне, создающий высокую нагрузку на диск
Аудит инфраструктурыТипичные примеры «серверных проблем» – код не виноват2. Скорость на сетевом интерфейсе упирается в «потолок»
Партнерская конференция 2015
#bitrixconf2015
Новостной сайт. Проблема: резко замедляется скорость сайта при выходе новости.
Аудит инфраструктурыТипичные примеры «серверных проблем» – код не виноват2. Скорость на сетевом интерфейсе упирается в «потолок»
Партнерская конференция 2015
#bitrixconf2015
Причина: пропускная способность заканчивается при регулярном выходе новостей
Аудит инфраструктурыТипичные примеры «серверных проблем» – код не виноват3. Хост-машина забирает ресурсы
Партнерская конференция 2015
#bitrixconf2015
Проблема: неожиданно начинает тормозить весь сервер
Аудит инфраструктурыТипичные примеры «серверных проблем» – код не виноват3. Хост-машина забирает ресурсы
Партнерская конференция 2015
#bitrixconf2015
Причина: виртуальный сервер с «прожорливыми соседями»
Аудит инфраструктурыСимптомы проблем в коде
Партнерская конференция 2015
#bitrixconf2015
Время ответа увеличилось в момент выкладки кода и осталось неизменным
Аудит инфраструктурыСимптомы проблем в коде
Партнерская конференция 2015
#bitrixconf2015
Время ответа в целом очень большое
Аудит кодаМетодика проведения
• Первичный анализ
монитор производительности на боевом сервере
• Изоляция проекта на «стенде»
Позволит провести анализ кода в ненагруженной экосистеме
• Постраничный поиск «долгих» компонентов + исследование кода
Детальный анализ самых медленных страниц
Партнерская конференция 2015
#bitrixconf2015
Аудит кодаПервичный анализ – монитор производительности на боевом сервере
• Цель: понять как работает сайт для большого числа пользователей
• Какие страницы/компоненты создают суммарно наибольшую
нагрузку на сервер
• Что можно оптимизировать в первую очередь, а что – впоследствии?
Партнерская конференция 2015
#bitrixconf2015
Аудит кодаПервичный анализ – монитор производительности на боевом сервере
• Убеждаемся что нет внешних причин для
«тормозов»
• Настройки – Настройки продукта – Настройки
модулей – Монитор производительности
• Вести журнал SQL запросов
• Сохранять стек вызова SQL запросов
Партнерская конференция 2015
#bitrixconf2015
Аудит кодаМонитор производительности - страницы
Позволяет найти:
• Страницы которые создают максимальную
нагрузку на процессор (если
оптимизировать – нагрузка на сервер будет
меньше)
• Страницы которые дольше всего грузятся
пользователю («скорость сайта» выше)
Партнерская конференция 2015
#bitrixconf2015
Аудит кодаМонитор производительности - страницы
Как включить:
• Фильтр – «+» - административный раздел
«нет»
• Для скорости загрузки страницы: страница-
время (среднее)
• Для снижения нагрузки на процессор
страница-время (сумма)
Партнерская конференция 2015
#bitrixconf2015
Аудит кодаМонитор производительности - компоненты
Позволяет найти:
• Самые «тяжелые» компоненты
• Посмотреть самые тяжелые
запросы в них (перейдя по клику на
число запросов)
• Найти откуда запрос вызывается (в
разделе «SQL запросы»)
Партнерская конференция 2015
#bitrixconf2015
Аудит кодаМонитор производительности – SQL запросы
Позволяет найти:
• Самые «тяжелые» запросы
• Компоненты, откуда они вызваны
• Непосредственное место вызова в
компонентах
• План выполнения запросов
Партнерская конференция 2015
#bitrixconf2015
Аудит кодаМонитор производительности – SQL запросы
Наведение мыши на SQL-запрос при
включенной в настройках Монитора
записи стэка вызовов покажет стек-
трейс вызова SQL запроса (места в
компоненте, откуда он вызывается)
Партнерская конференция 2015
#bitrixconf2015
Аудит кодаИзоляция кода на стенде
Партнерская конференция 2015
#bitrixconf2015
Цель: проверить работу кода на
ненагруженной инфраструктуре
• Отдельная виртуальная машина 1С-Битрикс
• Опционально: X-Windows с удобным
редактором кода
• Опционально: Установленный XHProf для
профилирования PHP
Аудит кодаИзоляция кода на стенде
Партнерская конференция 2015
#bitrixconf2015
• Rsync директории c 1С-Битрикс (и исключением
кэша, картинок и других больших файлов)
• Перенос БД
• До открытия сайта: переведение агентов на крон
SQL-запросом
• Ссылка на виртуальную машину (подробные
инструкции и больше материалов – позже)
www.itsumma.ru/bitrixtools
Аудит кодаПостраничный поиск долгих компонентов
Партнерская конференция 2015
#bitrixconf2015
Инструменты отладки
• Позволяет легко проанализировать
эффективность кэша
• Позволяют проанализировать структуру
выполнения компонентов на странице по
времени
Аудит кодаПостраничный поиск долгих компонентов
Партнерская конференция 2015
#bitrixconf2015
Поиск неработающего кэша
• Обходим все основные страницы
• Сбрасываем кэш, но не отключаем его в
инструментах отладки
• Если кэш работает эффективно – время
работы страницы должно быть в
приемлемых значениях (как минимум
<1.0с) и ниже «некэшированной версии»
Аудит кодаПостраничный поиск долгих компонентов
Партнерская конференция 2015
#bitrixconf2015
Поиск долгих компонентов
• Обходим все основные страницы
• Отключаем кэш в инструментах отладки
• Смотрим за структурой вызовов
компонентов
Аудит кодаПостраничный поиск долгих компонентов
Партнерская конференция 2015
#bitrixconf2015
Поиск долгих компонентов
• Обходим все основные страницы
• Отключаем кэш в инструментах отладки
• Смотрим за структурой вызовов
компонентов
Аудит кодаXHProf
Партнерская конференция 2015
#bitrixconf2015
Детальный аудит PHP-кода
• Профилировщик от Facebook
• https://github.com/phacility/xhprof
• Удобная процедура исследования кода
• Стоит использовать для анализа кода, когда проблема
не на стороне долгого обращения к базе данных
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 1 – проверяем сервер
• Ставим сервер на мониторинг (24-48 часов)
• Ставим на мониторинг внешнее время ответа веб-
страниц сайта
• Смотрим все базовые настройки операционной системы
• Смотрим не «развалился» ли RAID, работают ли бэкапы
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 2 – копируем проект на «стенд»
• Rsync кода
• Перенос БД
• Выключение агентов
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 3 – включаем монитор
производительности на боевом сервере
• Вести журнал SQL вызовов
• Сохранять стек вызова SQL запросов
• Включить монитор на 30 минут
• Удалить ранее собранные данные
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 4 – на стенде проверяем
работоспособность кэша
• Отладка – Суммарная статистика
• Отладка – Статистика SQL запросов
• Отладка – Статистика включаемых областей
• Отладка – Время исполнения страницы
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 4 – выбираем часто используемые
страницы (на глаз или по данным монитора
производительности)
• Главная
• Специальные предложения
• Каталог
• Раздел каталога
• Элемент каталога
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 4 – проверяем работоспособность кэша
для каждой выбранной страницы – Главная
• Выключаем кэш
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 4 – проверяем работоспособность кэша
для каждой выбранной страницы – Главная
• Выключаем кэш
• Обновляем страницу, смотрим время
исполнения
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 4 – проверяем работоспособность кэша
для каждой выбранной страницы – Главная
• Выключаем кэш
• Обновляем страницу, смотрим время
исполнения
• Включаем кэш, обновляем страницу,
смотрим время исполнения - работает
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 4 – проверяем работоспособность кэша
для каждой выбранной страницы –
Специальные предложения
Время ответа обновленной страницы с кэшом
не отличается от страницы без использования
кэша – кэш не работает.
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 4 – проверяем работоспособность кэша
для каждой выбранной страницы –
Специальные предложения
Время ответа обновленной страницы с кэшом
не отличается от страницы без использования
кэша – кэш не работает.
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 5 – для проблемных страниц
анализируем причины неиспользования
кэша
• Идем в раздел «время создания страницы»
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 5 – для проблемных страниц
анализируем причины неиспользования
кэша
• Идем в раздел «время создания страницы»
• Смотрим структуру вызова компонентов и
локализуем проблемный компонент
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 5 – для проблемных страниц
анализируем причины неиспользования
кэша
• Идем в раздел «время создания страницы»
• Смотрим структуру вызова компонентов и
локализуем проблемный компонент
• Смотрим в шаблон/компонент и
локализуем причину
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 5 – для проблемных страниц
анализируем причины неиспользования
кэша
• Идем в раздел «время создания страницы»
• Смотрим структуру вызова компонентов и
локализуем проблемный компонент
• Смотрим в шаблон/компонент и
локализуем причину
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 5 – для проблемных страниц
анализируем причины неиспользования
кэша
• Идем в раздел «время создания страницы»
• Смотрим структуру вызова компонентов и
локализуем проблемный компонент
• Смотрим в шаблон/компонент и
локализуем причину
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 5 – для проблемных страниц
анализируем причины неиспользования
кэша
• Идем в раздел «время создания страницы»
• Смотрим структуру вызова компонентов и
локализуем проблемный компонент
• Смотрим в шаблон/компонент и
локализуем причину
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 6 – анализируем результаты монитора
производительности
• Раздел «Страницы»
• Суммарное время – нагрузка на сервер
• Среднее время – скорость сайта
• Имеет смысл оптимизировать главную
страницу сайта и страницу каталога
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 6 – оптимизируем главную
• Смотрим время вызова компонентов
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 6 – продолжаем анализ страниц
• Смотрим время вызова компонентов
• Локализуем место долгой загрузки
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 6 – продолжаем анализ страниц
• Смотрим время вызова компонентов
• Локализуем место долгой загрузки
• Исследуем
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 7 – анализируем проблемы с php-кодом
• Включаем XHProf
• Идем по пути вызова функций
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 7 – анализируем проблемы с php-кодом
• Включаем XHProf
• Идем по пути вызова функций
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 7 – анализируем проблемы с php-кодом
• Включаем XHProf
• Идем по пути вызова функций
Пример аудитаnew.texenergo.ru
Партнерская конференция 2015
#bitrixconf2015
Шаг 7 – анализируем проблемы с php-кодом
• Включаем XHProf
• Идем по пути вызова функций
Аудит new.texenergo.ruИтоги
Партнерская конференция 2015
#bitrixconf2015
Простой аудит, продолжительность – 2 рабочих дня
• Снижение времени ответа некэшированных страниц с 3-5 секунд до 0.5
секунд в среднем
• Ускорение повторно загруженных страниц до 0.25 секунд в среднем
• Скорость сайта: быстро
Аудит new.texenergo.ruПути развития процедуры аудита
Партнерская конференция 2015
#bitrixconf2015
• Максимальная автоматизация – постобработка результатов сбора
данных монитором производительности
(акцент на долгих страницах, сводка по проблемным местам в коде)
• Сводка по компонентам в которых не был использован кэш
• База знаний по стандартным проблемам связанным с
производительностью
Евгений Потапов
• http://itsumma.ru
• http://facebook.com/eapotapov
http://itsumma.ru/bitrixtools
Партнерская конференция 2015
#bitrixconf2015
Александр Лыженков
• http://aeroidea.ru
• http://www.facebook.com/a.lyzhenkov