Использование XHProf для анализа узких мест производительности PHP (1)

PHP

Установите расширение xhprof.

wget http://pecl.php.net/get/xhprof-0.9.4.tgz
tar zxf xhprof-0.9.4.tgz
cd xhprof-0.9.4/extension/
sudo phpize
./configure
sudo make
sudo make install
cd ../скопировать код

настроить php.ini

[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmpскопировать код

Примечание: xhprof давно не обновлялся, пока не поддерживает php7, можно использовать php7GitHub.com/poofhazri-same/small….

Настройте среду xhprof

Вам необходимо скопировать два каталога в сжатом пакете xhprof в указанный каталог (при условии, что определение/work/xhprof/):

mkdir /work/xhprof/
cp -a xhprof_html/ /work/xhprof/
cp -a xhprof_lib/ /work/xhprof/скопировать код

Затем добавьте в файл входа в рамках проекта:

xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
register_shutdown_function(function() {
    $xhprof_data = xhprof_disable();
    if (function_exists('fastcgi_finish_request')){
        fastcgi_finish_request();
    }
    include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php";
    include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php";
    $xhprof_runs = new XHProfRuns_Default();
    $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof');
});скопировать код

Анализ кода:
$xhprof_dataОн записывает все время вызова функций и потребление памяти ЦП во время работы программы.В частности, какие показатели могут контролироваться параметрами xhprof_enable.В настоящее время поддерживаются следующие параметры:

  • HPROF_FLAGS_NO_BUILTINSВсе встроенные (внутренние) функции пропускаются.
  • XHPROF_FLAGS_CPUДобавьте данные ЦП к выходным данным о производительности.
  • XHPROF_FLAGS_MEMORYДобавьте данные памяти к выходным данным о производительности.

Последующая обработка не имеет ничего общего с расширением xhprof, грубо написав класс храненияXHProfRuns_Default,Буду$xhprof_dataСериализировать и сохранить в каталог, к которому можно получить доступ черезXHProfRuns_Default(__DIR__)вывести результат в текущий каталог или прочитать, если не указаноphp.iniв файле конфигурацииxhprof.output_dir, еще не указанный, он будет выводиться в/tmp.

xhprof_enableа такжеxhprof_disableОн идет парами, один — это начало кода для запуска, а другой — последний. В середине находится код для анализа.

После вышеописанной настройки мы впоследствии будем запрашивать интерфейс проекта, а xhprof будет анализировать ЦП, память, потребление времени и т. д. в процессе запроса. журнал хранится вxhprof.output_dirсодержание.

настроить веб

Настроил, как посмотреть лог? Мы можем создать простой веб-сервер:

xhprof.test.com.conf

server {
    listen       80;
    server_name  xhprof.test.com;

    root /work/xhprof/xhprof_html;
    index  index.html index.php;


    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}скопировать код

Затем настройте виртуальный хост xhprof.test.com. Перезапустите nginx и откройте xhprof.test.com, чтобы увидеть результат:


Список пользовательского интерфейса по умолчанию:

  • имя функции : имя функции
  • звонки: количество звонков
  • Включая Wall Time (микросекунды): время выполнения функции (включая подфункции)
  • IWall%: доля времени выполнения функции (включая подфункции).
  • Excl Wall Time (микросекунды): время работы функции (исключая подфункции)
  • EWall%: время выполнения функции (исключая подфункции)

Вы также можете увидеть ссылку [View Full Callgraph] в Интернете.После нажатия вы можете нарисовать график визуального анализа производительности.Если после нажатия сообщается об ошибке, это может быть отсутствие зависимости от graphviz. graphviz — это инструмент для рисования графиков, который позволяет более интуитивно просматривать узкие места в производительности. Установить при необходимости:

yum install -y libpng
yum install -y graphvizскопировать код

Эффект:

Ненавязчивое введение xhprof

Ранее мы реализовали функцию анализа, добавив код в файл записи проекта. Более элегантный способ — создать дополнительный файл xhprof.inc.php и сохранить его в/work/xhprof/Под содержанием:

xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
register_shutdown_function(function() {
    $xhprof_data = xhprof_disable();
    if (function_exists('fastcgi_finish_request')){
        fastcgi_finish_request();
    }
    include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php";
    include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php";
    $xhprof_runs = new XHProfRuns_Default();
    $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof');
});скопировать код

Используйте функцию автозагрузки PHP, чтобы внедрить этот файл перед выполнением кода, отредактируйте php.ini:

auto_prepend_file = /work/xhprof/xhprof.inc.phpскопировать код

Затем перезапустите службу PHP. Таким образом, все, что использует среду php, вступит в силу.

Или пропишите в конфигурацию nginx указанного проекта: jifen.cc.conf

location ~ \.php$ {
        
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "auto_prepend_file=/work/xhprof/xhprof.inc.php";
        include        fastcgi_params;
    }скопировать код

Затем перезапустите службу nginx. Это вступит в силу только для этого элемента.

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

Изменить частоту дискретизации

По умолчанию xhprof будет запускаться каждый раз, если онлайн-среда настроена таким образом, это повлияет на производительность.

xhprof.inc.php

<?php
$profiling = !(mt_rand()%9); 
if($profiling) xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU);
register_shutdown_function(function() use($profiling) {
    if($profiling){
        $xhprof_data = xhprof_disable();
        if (function_exists('fastcgi_finish_request')){
            fastcgi_finish_request();
        }
        include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php";
        include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php";
        $xhprof_runs = new XHProfRuns_Default();
        $xhprof_runs->save_run($xhprof_data, 'xhprof'); 
    }
});скопировать код

Суммировать

В этой статье мы расскажем, как анализировать производительность PHP на основе расширения xhprof, записывать ее в журнал и, наконец, отображать в Интернете с помощью пользовательского интерфейса, поставляемого с расширением xhprof. Основные точки знаний:

  • Установите расширение xhprof.
  • Внедрить xhprof в приложение
  • Отображение результатов анализа на основе nginx

Ссылаться на

1. Настройка и использование Xhprof — краткая книга
у-у-у. Краткое описание.com/afraid/38 ой 3 ой ой 819…
2. Используйте XHProf, чтобы найти узкие места в производительности PHP Develop Paper
сегмент fault.com/ah/119000000…
3. Установка и использование инструмента отслеживания и анализа производительности PHP xhprof Develop Paper
сегмент fault.com/ah/119000000…
4. Tideways и xhgui создают PHP-платформу для неинтрузивного мониторинга | Я большой медведь
blog.IT2048.Талант/статья- Упоминания…

 

Заявление об авторских правах: Перепечатка или специальное заявление не указываются как оригинальная работа автора. В этой статье используется следующее соглашение для авторизации,Бесплатная перепечатка — некоммерческая — не производная — сохранить авторство | Creative Commons BY-NC-ND 3.0, просьба указывать автора и источник при перепечатке.

Автор: Feihongying~

Источник:http://52fhy.cnblogs.com/


рекомендовать! Всего за 2,50 доллара в месяц вы можете получить VPS с SSD!