Анализ нагруженых частей Php кода с помощью xhprof / ~#root -i
  • Unix-подобные ОС
  • Php
  • MySQL
  • JavaScript
  • Менеджеры пакетов
  • Docker
  • Seo
  • Вход
  • Регистрация
  • Главная
  • 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
802
0
Теги
Ubuntu 14.04 Php 5.6 Анализ
Поделиться

Комментарии

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

Похожие посты

13 Декабря 2018

Анализ источника посетителей с помощью Sourcebuster.js или откуда пользователь перешел на сайт

Иногда, требуется вести внутренний учет источника, с которого зашел пользователь на сайт и к примеру сделал заказ. Рассмотрим пример, как узнать, откуда пользователь перешел на сайт. В этом нам поможет библиотека Sourcebuster.js, которая даст знать источник с которого перешел клиент на сайт ...
20 Декабря 2018

IonCube PHP Loader на Php 7.2 Ubuntu 18.04

Рассмотрим установку ionCube loader для php 7.2 для Ubuntu 18.04. Данный подход подойдет для любой версии php, которую поддерждивает разработчик ionCube.

12 Мая 2018

Установка Photoshop CS6 на Ubuntu 14.04

Для установки потребуется PlayOnLinux, который лежит в штатном репозитории Ubuntu 14.04. PlayOnLinux работает, устанавливая программы на своем собственном виртуальном диске, позволяя вам определить, какую версию Wine в...
17 Мая 2018

Установка Gearman на Ubuntu 14.04

Если вашему проекту требуется выполнение очередей в фоновом режиме, то такую возможность может дать Gearman. Это простая система для постановки очередей в фоновом или обычном режимах. Рассмотрим возможность установки Gearman на Ubuntu 14.04.

17 Мая 2018

Что такое MVC или с чего начать писать сайт?

Рассмотрим вариант создания простого проекта с MVС, который будет откликаться статическую ссылку в браузере, без управления $_GET параметрами. Ссылка будет разбиваться на путь к файлам и задействовать нужные контроллер, модель и view файл.

19 Мая 2018

Фоновый процесс очереди в Php с Gearman

Иногда возникает нужда использовать фоновый процессы на Php. Рассмотрим пример использования такой возможности в связке Gearman + Php.

19 Мая 2018

Worker Gearman с консоли Cli на Php

Для нормальной работы воркера Gearman требуется постоянная его работа в зацикленном режиме. Со стороны сервера это можно реализовать одним запросом через консоль Cli. Рассмотрим роботу на простом примере.

21 Мая 2018

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

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

Rootcms интернет-магазин

Теги

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

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

Игорь, скорее всего так определяет сам sourcebuste...
root-i
16.12.20
Не могу разобраться почему скрипт определяет перех...
Игорь
16.12.20
Четко. Пришлось грохнуть папку node_modules...
Khludev
09.12.20
Кому нужна с картинками и артикулами обращайтесь i...
Артём
19.10.20

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

Благодарность: $
Контакты

Обратная связь

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

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

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