Анализ нагруженных частей Php кода с помощью xhprof / ~#root -i Анализ нагруженных частей Php кода с помощью xhprof / ~#root -i Анализ нагруженных частей Php кода с помощью xhprof / ~#root -i Анализ нагруженных частей Php кода с помощью xhprof / ~#root -i Анализ нагруженных частей Php кода с помощью xhprof / ~#root -i Анализ нагруженных частей Php кода с помощью xhprof / ~#root -i Анализ нагруженных частей Php кода с помощью xhprof / ~#root -i Анализ нагруженных частей Php кода с помощью xhprof / ~#root -i
  • RU
  • UA
  • EN
  • Создать интернет-магазин
  • Документация
  • Блог
    • Unix-подобные ОС
    • Php
    • MySQL
    • JavaScript
    • Менеджеры пакетов
    • Docker
    • Seo
  • Вспомогательные сервисы
    • Короткие ссылки
    • Oбмен просмотрами YouTube
  • Вход
  • Регистрация
  • Главная
  • Php
  • Анализ нагруженных частей Php кода с помощью xhprof

Анализ нагруженных частей Php кода с помощью xhprof

xhprof - инструмент, который позволяет собирать информацию как на локальной машине, так и на продакшене.

Выбор пал на xhprof, так как при определенных дополнениях можно визуально отслеживать работу классов и строить графики.

1. Ставим на Ubuntu 14.04 // никак не перебью на новую =)

Штатная команда НЕ ПОДОШЛА, у меня в репозиториях такого нет (apt-get install xhprof), по этому пришлось собирать его на коленке.

sudo apt-get install php-pear php5.6-dev php5.6-mcrypt

sudo php5enmod mcrypt

sudo pecl install xhprof-beta

Установка ведется через pecl, а выше нужные расширения для php и подключение mcrypt. Установочные пакеты зависят от версии линукса и от версии php.

2. Для своей версии php задаем определение в mods-available:

sudo nano /etc/php/5.6/mods-available/xhprof.ini

в файл внесем строки

extension=xhprof.so

Если все прошло правильно, то можно подключить модуль xhprof (под свою версию php).

sudo php5enmod xhprof

sudo service apache2 restart

3. Проверка установленного пакета:

php -i | grep xhprof

xhprof varsion
4. Начало работы:
После удачной установки и колдовства, в коде перестала бросать ошибки такая конструкция.

<?php

// Инициализируем xhprof
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

foreach ([1,2,3] as $v) {
    echo $v;
}

// Останавливаем xhprof после выполнения программы
$xhprof_data = xhprof_disable();

XHPROF_FLAGS_CPU - анализ процессорного времени

XHPROF_FLAGS_MEMORY - анализ памяти

Использование очень простое, нужный для отладки код следует поместить между xhprof_enable() и xhprof_disable(). В $xhprof_data будет содержаться вся информация. Но для человеческого понимания она сложна.

5. Для более удобной обработки данной информации:

Существует готовый интерфейс для подачи отстрелянной информации в человеческом виде. Скачать здесь. Или здесь. Или терминал:

cd /var/www;wget http://pecl.php.net/get/xhprof-0.9.4.tgzgzip -d xhprof-0.9.4.tgztar -xvf xhprof-0.9.4.tar

Следует распаковать содержимое архива в директорию, которая будет доступна как домен. К примеру на локальной машине это /var/www/xhprof-0.9.4

5.1. Заводим локальный адрес (будет xhprof.loc на apache):

sudo nano /etc/apache2/sites-available/xhprof.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName xhprof.loc
    ServerAlias www.xhprof.loc
    DocumentRoot /var/www/xhprof-0.9.4/xhprof_html
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/xhprof-0.9.4/xhprof_html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

sudo nano /etc/hosts

127.0.0.1     www.xhprof.loc
127.0.0.1     xhprof.loc

sudo service apache2 restart

Как уже понятно, рабочая папка этого движка - xhprof_html. Фронтовая часть выглядит так:

xhprof_html

5.2. Использование в коде:

Для использования, после xhprof_disable() следует добавить строки определения места, куда сбрасывать отработанные логи.

<?php

// Инициализируем xhprof
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

foreach ([1,2,3] as $v) {
    echo $v;
}

// Останавливаем xhprof после выполнения программы
$xhprof_data = xhprof_disable();

// Стаживает данные с идентификатором ""
// Обратите внимание, что путь, в который мы распаковали все
include_once "/var/www/xhprof-0.9.4/xhprof_lib/utils/xhprof_lib.php";
include_once "/var/www/xhprof-0.9.4/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "product");

product xhprof

Выдаст много информации по всем запущенным классам:

xhprof_info

6. Графический отчет:

Так же xhprof позволяет генерировать графический отчет, по которому понятно что и куда стучится. Для этого нужна установка graphviz.

sudo apt-get install graphviz

graphviz

Использовал источники: источник1 источник2

root-i
31 Октября 18
1380
0
Теги
Ubuntu 14.04 Php 5.6 Анализ
Поделиться

Комментарии

Имя
Электронная почта
Рейтинг
Отзыв

Другие статьи из категории

25 Апреля 2022

Создать и скачать CSV на PHP

Рассмотрим возможность быстрого создания CSV файла с автоматическим скачиванием файла. Рассмотрим формирование, разделители и header для возможности скачать файл.

19 Июня 2019

Шаблоны ImageCMS 4.10-4.12.1

Последние шаблоны от ImageCMS 4.12, для скачивания нужна авторизация.

26 Января 2019

Долгое хранение корзины в интернет-магазине

Рассмотрим варианты популярные варианты хранения товаров в корзине в интернет-магазине. Обозначим плюсы и минусы таких хранений. Рассмотрим варианты долгосрочного хранения корзины.

17 Января 2019

Ключ-лицензия для ImageCMS 4.9-4.12.1 Pro и Pre

Создание ключа для imageCMS 4.9-4.12.1 Pro и Pre. Для получения следует авторизироваться.

07 Декабря 2018

$_SERVER['DOCUMENT_ROOT'] в CLI или Cron

При запуске скрипта с консоли отсутствует DOCUMENT_ROOT в $_SERVER. Попытаемся обойти это своими путями, отловить директорию файла.

18 Июля 2018

Группировка условий в запросе ORM Propel (condition, combine)

Разберем возможность объединения условий в запросе по группам в Propel. Рассмотрим пример фильтрации по полям с помощью ->condition() и ->combine().

14 Июня 2018

Авторизация 1С на сайте PHP_AUTH_USER на CentOS apache

Столкнулся с проблемой авторизации 1с на сайте. Сервер почему то не принимал от нее параметр PHP_AUTH_USER и PHP_AUTH_PW. Рассмотрим подробнее решение и обход данных параметров в $_SERVER .

21 Мая 2018

Подсоединяем не объявленную таблицу в Propel или Join Custom Table Propel

Целью статьи стало присоединение (join) не объявленной в схеме (schema.xml) таблице в propel2. Видимо редкий случай или просто недостаточно документации по данной Propel ORM.

Категории

  • Unix-подобные ОС
  • Php
  • MySQL
  • JavaScript
  • Менеджеры пакетов
  • Docker
  • Seo

Теги

Ubuntu 14.04 (17) Софт (11) Gearman (3) Сервисы (2) Framework (1) MVC (1) Php 5.6 (16) Cli (3) Propel (3) ORM (3) JavaScript (5) Css (1) Composer (4) Docker (3) Seo (4) MySQL (5) docker-compose (2) CentOS (1) 1С (1) Memcache (1) Memcached (1) Php 7 (6) Анализ (2) Ubuntu 18.04 (13) MySQL 5.7 (4) Генерация (2) Bower (1) Npm (1) NodeJs (3) Gulp (1) ImageCMS (2) Базы (1) JQuery (1) Сниппет (1) Apache (1) Cron (1)

Последние комментарии

alex, я вижу 2 причины почему так может быть. Не в...
root-i
04.07.22
Сделал все так как написано в статье, не работает.
alex
04.07.22
Как вариант это может происходить из-за неизвестно...
root-i
21.01.22
Чтобы убрать ошибку Uncaught TypeError: $ is not a...
wlad2.ru
11.01.22

Делюсь информацией в которой я требовал помощи и разбираясь затрачивал много времени. Если информация помогла хотя бы одному человеку, значит этот сайт создан не зря.

Благодарность, на продолжение работы сайта:
Контакты

Telegram Viber Mail

Поиск по сайту

  • Вход
  • Регистрация

Сайт работает на chmod -R