Ваш проект набирает популярность, число посетителей растет. При этом производительность работы приложения неумолимо снижается. Вы уже предприняли ряд решений по оптимизации производительности сервера.
И возникает вопрос, что дальше? Есть два пути решения.
Зачем что-то оптимизировать, если можно решить вопрос добавив ресурсов серверу или масштабировать проект на несколько серверов тем самым распределив нагрузку. Есть случаи когда данное решение может быть оправдано. Например, Ваше приложение размещено на одном сервере, добавление второго сервера в кластер в целом почти удвоит производительность. А теперь переведем затраты на использование рабочего времени разработчика и его результат, сможет ли он в соответствии с затратами удвоить производительность приложения. Может быть и другая ситуация, серверов уже и так много в кластере, и пора задуматься о работе приложения и его коде, а не просто наращивать мощность.
Прежде чем принимать решения об вложениях на приобретении дополнительного сервера нужно оценить работу приложения, есть ли в нем проблема или узкое место все таки в ресурсах.
Показатель проблемы, это время ответа приложения. Потому как посетителю нет дела до того загружен сервер по CPU на 5% или на 105%, важно время за которое он получил ответ на свои действия от приложения.
Как решить проблему производительности кода?
Сайт состоит из ряда скриптов, выполняемых в то или иное время. И проблема может заключаться, только в каком-то одном скрипте, исправив его все производительность увеличится. Таким образом, разработчики практически всегда могут оптимизировать проект. Зачастую этим никто не занимается. Основная задача программиста отловить баги.
Хотя стоит отметить, что на восприятия пользователя больше влияет производительность, чем баги. В малых компаниях, как раз таки и занимаются только их устранением никак не обращая внимания на производительность и оптимизацию кода.
Что бы оценить время выполнения скриптов мы замеряем их время.
Мониторинг php скриптов с помощью Pinba
Pinba состоит из модуля PHP-модуля, который используется на клиентской части и сервера. PHP-модуль отсылает на сервер информацию о выполнении скриптов. На сервере она накапливается и анализируется. Можно получать сырые данные, выборку, отчеты, а также удобные графики и таблицы, в том числе и в реальном времени.
Мониторинг производительности приложения
- Замер и обработка времени обработки запроса на серверах приложения
- Замер и обработка времени загрузки страниц и ajax запросов в браузере
- Замер использования ресурсов CPU и RAM на серверах приложения
- Мониторинг ошибок во время выполнения запроса
Цели и особенности мониторинга производительности
- Помогает понять какие именно участки кода тормозят, но при этом необходимо самостоятельно разобраться ПОЧЕМУ
- Дает возможность оценить влияние изменения в коде на скорость обработки запросов
- Эффективный инструмент в оценке работы новых релизов и необходимости быстрого отката
- Формирует агрегированные данные
- Длительное хранение статистических данных
- Графическая обработка данных
- Мониторинг
- Уведомления
- reprt_by_script_name
- reprt_by_server_name
- reprt_by_hstname
- reprt_by_server_and_scriptr
- reprt_by_hstname_and_script
- reprt_by_hstname_and_server
- reprt_by_hstname_server_and_sc ript
- tag inf by 1 tag
- tag inf by 2 tags
- tag inf by N tags
- tag reprt with gruping by script name and tag value
- tag reprt with gruping by script name, tag value, hstname and server name
- tag reprt with gruping by script name and 2 tags
- tag reprt with gruping by script name and N tags
Агрегированные данные
90, 95, 99, 100 персентили для ключевых показателей
90, 95, 99, 100 персентили для mem_peak_usage и cpu_usage
- Отслеживает критические показатели
- Следит за 90 и 95 персентилями
- Уведомляет о снижении метрик
- Уведомляет о нормализации показателей
Анализируем тяжелые страницы: время, память, процессор
Помимо php_extension есть расширения для:
- Nginx
- Node.js
- Ruby
- Python
Хотите знать, что происходит с Вашим приложением или сайтом, мониторить скорость работы и выполнения скриптов? Обращайтесь мы решим эту задачу.