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은 https://github.com/phacility/를 사용할 수 있습니다. ...
xhprof 압축 패키지의 두 디렉터리를 지정된 디렉터리에 복사해야 합니다(/work/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
中记录了程序运行过程中所有的函数调用时间及CPU内存消耗,具体记录哪些指标可以通过xhprof_enable的参数控制,目前支持的参数有:
HPROF_FLAGS_NO_BUILTINS
跳过所有内置(内部)函数。
XHPROF_FLAGS_CPU
输出的性能数据中添加 CPU 数据。
XHPROF_FLAGS_MEMORY
输出的性能数据中添加内存数据。
之后的处理已经与xhprof扩展无关,大致是编写一个存储类XHProfRuns_Default
,将$xhprof_data
序列化并保存到某个目录,可以通过XHProfRuns_Default(__DIR__)
将结果输出到当前目录,如果不指定则会读取php.ini
配置文件中的xhprof.output_dir
,仍然没有指定则会输出到/tmp
。
xhprof_enable
和xhprof_disable
是成对出现的,一个是代码运行最前面,一个是最后面。中间是要分析的代码。
经过上面的配置后,我们后续请求项目的接口,xhprof就会分析请求过程中的CPU、内存、耗时等内容。日志保存在xhprof.output_dir
目录。
配置好了,怎么查看日志呢?我们可以搭建一个简单的web server:
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就可以看到效果了:
默认的UI里列出了:
funciton name : 函数名
calls: 调用次数
Incl. Wall Time (microsec): 函数运行时间(包括子函数)
IWall%:函数运行时间(包括子函数)占比
Excl. Wall Time(microsec):函数运行时间(不包括子函数)
EWall%:函数运行时间(不包括子函数)
在web中还可以看到 [View Full Callgraph] 链接,点击后可以绘制出一张可视化的性能分析图,如果点击后报错的话,可能是缺少依赖graphviz。graphviz是一个绘制图形的工具,可以更为直观的让你查看性能的瓶颈。如果需要可以安装:
yum install -y libpng yum install -y graphviz
效果:
前面我们是通过在项目入口文件添加代码实现了分析的功能。更优雅的方式是新建一个额外的文件 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'); });그런 다음 추가합니다. 프로젝트 프레임워크의 항목 파일에 추가:
auto_prepend_file = /work/xhprof/xhprof.inc.php코드 분석:
$xhprof_data
는 프로그램 실행 중 모든 함수 호출 시간과 CPU 메모리 소비를 기록합니다. 구체적으로 xhprof_enable 매개변수로 제어할 수 있는 지표입니다. 현재 지원되는 매개변수는 다음과 같습니다:
HPROF_FLAGS_NO_BUILTINS
모든 내장(내부) 함수를 건너뜁니다.
XHPROF_FLAGS_CPU
로 출력되는 성능 데이터에 CPU 데이터를 추가합니다.
XHPROF_FLAGS_MEMORY
는 성능 데이터 출력에 메모리 데이터를 추가합니다.
후속 처리는 xhprof 확장과 관련이 없습니다. 대략적으로 저장소 클래스 XHProfRuns_Default
를 작성하고 $xhprof_data
를 직렬화하여 특정 디렉터리에 저장합니다. 이는 XHProfRuns_Default(__DIR__)를 통해 수행할 수 있으며 지정되지 않은 경우 php.ini
의 xhprof.output_dir
에 결과를 출력합니다. > 구성 파일을 읽습니다. 여전히 지정하지 않으면 출력이 /tmp
로 전송됩니다.
xhprof_enable
과 xhprof_disable
은 쌍으로 나타나며, 하나는 실행 중인 코드의 앞에 있고 다른 하나는 끝에 있습니다. 가운데에는 분석할 코드가 있습니다. xhprof.output_dir
디렉터리에 저장됩니다. 웹 구성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; }
기본 UI 목록:
🎜호출 횟수 🎜🎜🎜🎜 .벽 시간 (마이크로초): 기능 실행 시간(하위 기능 포함) 🎜🎜🎜🎜IWall%: 기능 실행 시간(하위 기능 포함) 비율 🎜🎜🎜🎜월 시간(마이크로초): 기능 실행 시간(하위 기능 제외) 기능)🎜🎜🎜🎜EWall%: 기능 실행 시간(하위 기능 제외)🎜🎜🎜🎜웹에서도 [전체 호출 그래프 보기] 링크를 보실 수 있으며, 클릭 후 시각적인 성능 분석 그래프를 그릴 수 있습니다. , 클릭 후 오류가 보고되면 종속성 graphviz가 누락되었을 수 있습니다. Graphviz는 성능 병목 현상을 보다 직관적으로 볼 수 있는 그래프 그리기 도구입니다. 필요한 경우 설치할 수 있습니다. 🎜<?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'); } });🎜효과: 🎜🎜🎜비침해적으로 xhprof 소개🎜🎜이전에는 프로젝트 항목 파일에 코드를 추가하여 분석 기능을 구현했습니다. 더 우아한 방법은 추가 파일 xhprof.inc.php를 만들어
/work/xhprof/
디렉터리에 저장하는 것입니다. 🎜rrreee🎜코드를 실행하기 전에 PHP의 자동 로딩 기능을 사용하여 이 파일을 삽입하세요. , php.ini: 🎜rrreee🎜를 편집한 다음 PHP 서비스를 다시 시작하세요. 이는 이 PHP 환경을 사용하는 모든 사람에게 적용됩니다. 🎜🎜또는 지정된 프로젝트의 nginx 구성에 작성할 수 있습니다: 🎜jifen.cc.conf🎜rrreee🎜 그런 다음 nginx 서비스를 다시 시작하세요. 이는 이 프로젝트에만 적용됩니다. 🎜🎜auto_prepend_file 및 auto_append_file을 통해 포함된 파일은 이 모드에서 구문 분석되지만 함수를 호출하기 전에 정의해야 하는 등 몇 가지 제한 사항이 있습니다. 🎜🎜샘플링 빈도 수정🎜🎜기본적으로 xhprof는 매번 실행됩니다. 온라인 환경이 이와 같이 설정되면 성능에 영향을 미칩니다. 🎜🎜xhprof.inc.php🎜rrreee🎜Summary🎜🎜 이번 글에서는 xhprof 확장자를 기반으로 PHP 성능을 분석하여 로그에 기록하고, 마지막으로 xhprof 확장자가 제공하는 UI를 사용하여 표시하는 방법을 소개했습니다. 웹에서. 주요 지식 포인트: 🎜🎜🎜🎜xhprof 확장 설치🎜🎜🎜🎜애플리케이션에 xhprof 삽입🎜🎜🎜🎜nginx 기반 분석 결과 표시🎜🎜🎜🎜위 내용은 이 글의 전체 내용입니다. 모두의 학습에 도움이 됩니다. 더 많은 관련 콘텐츠를 보려면 PHP 중국어 웹사이트를 주목하세요! 🎜🎜관련 권장 사항: 🎜🎜🎜php7+의 php-fpm 매개변수 구성에 대한 참고 사항🎜🎜laravel-admin에서 양식을 편집할 때 현재 값을 자동으로 선택할 수 없는 문제 해결
위 내용은 XHProf를 사용하여 PHP 성능 병목 현상을 분석하는 방법 1의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!