Анализ с использованием xhprof в php7

PHP

вступительное предложение

Это чистый документ, если он вам понадобится в будущем, вы можете найти его в любой момент и использовать для анализа xhprof, что удобно для тестирования кода и сравнительного анализа (поддерживает php7).

Предварительная сборка виртуальной тестовой среды Docker

docker run -it -p 80:80 -v /Users/xxx/Desktop/xhprof:/data phalcon /bin/bash

1. Установите xhprof

Существует довольно много xhprof, поддерживающих php7, мы используем его здесьGitHub.com/Godson H/Мне нравится…этот проект.

1.1 Вытяните проект

git clone https://github.com/longxinH/xhprof.git

1.2 Проект установки

cd xhprof/extension/
/usr/server/php7/bin/phpize
./configure --with-php-config=/usr/server/php7/bin/php-config
make && make install

1.3 Добавьте расширение xhprof.so

В конце выполнения нам нужно ввести этот файл so в конфигурацию php.ini

Просмотр пути к файлу php.ini

/usr/server/php7/bin/php --ini

Configuration File (php.ini) Path: /usr/server/php7/etc
Loaded Configuration File:         /usr/server/php7/etc/php.ini
Scan for additional .ini files in: /usr/server/php7/etc/php
Additional .ini files parsed:      (none)

Отредактируйте /usr/server/php7/etc/php.ini

[Xhprof]
extension=xhprof.so
xhprof.output_dir=/data/logs

Просто перезапустите php-fpm.

2. Использование xhprof

Процесс построения кейса

Мы встраиваем следующий код перед логикой, которую нужно отслеживать

\xhprof_enable();
......
$order = new OrderAdepter();
$result = $order->getUserOrderByOrderNo(123);
......
$xhprof_data = \xhprof_disable();
print_r($xhprof_data);

output:

Мы обнаружили, что были вызваны две функции в расширении xhprof, и значение выходного значения

ct 表示 当前这个函数调用的次数,此案例都是1次
wt 表示 函数执行时间的耗时,单位为微秒

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

\xhprof_enable(
    XHPROF_FLAGS_MEMORY  
    +XHPROF_FLAGS_CPU
    +XHPROF_FLAGS_NO_BUILTINS
);

output:

  1. XHPROF_FLAGS_MEMORY Статистика использования памяти

  2. XHPROF_FLAGS_ЦП Статистика использования процессора

  3. XHPROF_FLAGS_NO_BUILTINS Встроенные функции не учитываются. Этот вывод показывает, что функции в нашем расширении были проигнорированы.

Мы нашли поле статистики использования памяти, есть два вывода mu и pmu , mu представляет используемую память (байты), pmu представляет пиковое использование памяти (байты)

3. График xhprof

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

3.1 На данный момент нам нужно использовать библиотеку xhprof_lib

Когда мы загрузили исходный код xhprof, каталог уже содержал

\xhprof_enable(XHPROF_FLAGS_MEMORY + XHPROF_FLAGS_CPU+XHPROF_FLAGS_NO_BUILTINS);

......
$order = new OrderAdepter();
$result = $order->getUserOrderByOrderNo(123);
......

$xhprof_data = \xhprof_disable();

include_once  '/data/xhprof-master/xhprof_lib/utils/xhprof_lib.php';
include_once  '/data/xhprof-master/xhprof_lib/utils/xhprof_runs.php';
$xhprof_runs = new \XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, 'your_project');
echo $run_id; //output 5cbf25e21fe9b

Выполнение выводит строку, которую мы можем понимать как идентификатор файла. Мы обнаружили, что был выполнен метод save_run, куда он сохраняется?

Вы помните другую конфигурацию, когда мы представили расширение xhprof.so?

Правильно, по пути, настроенному xhprof.output_dir (вам нужно вручную создать каталог)

Если вам интересно, вы можете открыть его и посмотреть, в котором хранится некоторая сериализованная информация об объекте, которую мы проанализировали.

3.2 Настройка отдельного сервиса для доступа к результатам нашего анализа

Мы указываем на каталог xhprof_html в нашем проекте xhprof

Думаю, теперь вы понимаете роль нашего run_id и проекта в save_run.

Верхняя часть — это обзор запрошенных индикаторов интерфейса, а следующая — конкретное выполнение каждой вызывающей функции.

имя поля имея в виду
Calls количество звонков
Incl. Wall Time Вызовы включают все время, проведенное в подфункциях, в микросекундах
Excl. Wall Time Время, необходимое для выполнения функции, исключая время выполнения поддерева, в микросекундах.
Incl. CPU Вызов включает в себя все процессорное время, затраченное подфункцией
Excl. CPU Время ЦП, затраченное на выполнение самой функции, исключая время выполнения поддерева, в микросекундах
Incl.MemUse Включить память, используемую выполнением подфункции, в байтах
Excl.MemUse Функция выполняет свою собственную память, в байтах
Incl.PeakMemUse Пик вкл.MemUse
Excl.PeakMemUse Пик Excl.MemUse

Остаток следующего % end является соответствующей пропорцией

3.3 [View Full Callgraph]

Если вы просматриваете вызывающий процесс, вам необходимо установить графическую библиотеку graphviz. Тут рекомендуем вручную установить версию graphviz 2.24.0 (лично наступаю на яму, 2.40 не поддерживает)

 yum -y install libtool-ltdl-devel

cd /data/graphviz-2.24.0

./configure
make
make install

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

4. Проблемы

Мы обнаружили сильные зависимости при использовании xhprof выше и внедрили в код несколько классов из установочного пакета xhprof.

include_once  '/data/xhprof-master/xhprof_lib/utils/xhprof_lib.php';
include_once  '/data/xhprof-master/xhprof_lib/utils/xhprof_runs.php';

Здесь мы можем использовать ссылку на пакет composer для достижения той же функции.Рекомендуется ввести пакет pbweb/xhprof.

5. Конец

Надеюсь, все счастливы

Больше внимания общественности к номеру [Дай Дао Сюн Итун]