вступительное предложение
Это чистый документ, если он вам понадобится в будущем, вы можете найти его в любой момент и использовать для анализа 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:
-
XHPROF_FLAGS_MEMORY Статистика использования памяти
-
XHPROF_FLAGS_ЦП Статистика использования процессора
-
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. Конец
Надеюсь, все счастливы
Больше внимания общественности к номеру [Дай Дао Сюн Итун]