使用XHProf分析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。需要在github上下载 https://github.com/phacility/xhprof.git

配置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_enablexhprof_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就可以看到效果了:


非侵入式引入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配置里也行:

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');
    }
});

参考

1、Xhprof 的配置和使用方法 - 简书
https://www.jianshu.com/p/38e3ae81970c
2、使用XHProf查找PHP性能瓶颈 - 程序猿成长计划 - SegmentFault 思否
https://segmentfault.com/a/1190000003509917
3、PHP性能追踪及分析工具xhprof的安装与使用 - 马新才的技术博客 - SegmentFault 思否
https://segmentfault.com/a/1190000007288664
4、Tideways和xhgui打造PHP非侵入式监控平台 | 我是大熊
http://blog.it2048.cn/article-tideways-xhgui/

原文地址:https://www.cnblogs.com/52fhy/p/9031529.html

时间: 2024-10-11 23:47:58

使用XHProf分析PHP性能瓶颈的相关文章

Linux下Java线程详细监控和其dump的分析使用----分析Java性能瓶颈

这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: (一):通过[top -p 12377 -H] 查看java进程的有哪些线程的运行情况:       和通过[jstack 12377 > stack.log]生成Java线程的dump详细信息: 先用top命令找出占用资源厉害的java进程id,如图:# top 如上

使用 XHProf 分析你的 PHP 程序

引自原文 http://blog.aboutc.net/php/17/php-profiler-xhprof 简介 XHProf是一个轻量级PHP性能分析工具,类似 xdebug,但比 xdebug 分析的信息更加详细, 包括函数的调用次数,花费的时间(自身花费时间和包含内部函数花费的时间),所占内存/CPU,所占内存的峰值及所占百分比等, 为什么用的是等呢,因为源码包中 xhprof_lib/display/xhprof.php文件里还有一个 Incl. User (microsecs) 和 

使用XHProf查找PHP性能瓶颈

XHProf是facebook 开发的一个测试php性能的扩展,本文记录了在PHP应用中使用XHProf对PHP进行性能优化,查找性能瓶颈的方法. 安装Xhprof扩展 $ wget http://pecl.php.net/get/xhprof-0.9.4.tgz $ tar -zxvf xhprof-0.9.4.tgz $ cd xhprof-0.9.4 $ cd extension/ $ phpize $ ./configure $ make $ sudo make install 修改ph

火焰图分析openresty性能瓶颈

注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包,然后解压../configure; make; make install 安装到目标主机:执行命令 stap -ve 'probe begin { log("hello systemtap!") exit() }' 如果提示pass 5: run completed ... 就表示安装成

XHProf分析PHP性能

XHProf 扩展安装 git clone https://github.com/longxinH/xhprof cd /xhprof/extension phpize && ./configure --with-php-config=/usr/local/php/bin/php-config make && make install yaconf.directory=/tmp/yaconf/ xhprof.output_dir=/tmp/xhprof

mysql性能优化-慢查询分析、优化索引和配置

一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connections 2)      back_log 3)      interactive_timeout 4)      key_buffer_size 5)      query_cache_size 6)      record_buffer_size 7)      read_rnd_buffer

Shell脚本查看linux系统性能瓶颈(转)

linux服务器敲命令反应慢,网站访问慢,到底什么情况?根据本人的经验,主要原因可能是系统资源到达瓶颈,已经无法处理更多请求.在有监控系统情况下,可以直接通过WEB页面可视化看出是CPU瓶颈?硬盘瓶颈?还是网络瓶颈?如果公司服务器较少或者云服务器,就有可能没有一套监控系统,这时就要登陆到服务器,一条一条的敲命令,查找分析性能瓶颈.命令这么多,咋记得住啊!就算记得住,输入也费劲,于是就有了这个脚本,为了以后自己使用,另外也想分享给博友,学shell朋友能从中得到一丢丢启发.写的比较仓促,内容有点粗

Shell脚本查看linux系统性能瓶颈

linux服务器敲命令反应慢,网站访问慢,到底什么情况?根据本人的经验,主要原因可能是系统资源到达瓶颈,已经无法处理更多请求.在有监控系统情况下,可以直接通过WEB页面可视化看出是CPU瓶颈?硬盘瓶颈?还是网络瓶颈?如果公司服务器较少或者云服务器,就有可能没有一套监控系统,这时就要登陆到服务器,一条一条的敲命令,查找分析性能瓶颈.命令这么多,咋记得住啊!就算记得住,输入也费劲,于是就有了这个脚本,为了以后自己使用,另外也想分享给博友,学shell朋友能从中得到一丢丢启发.写的比较仓促,内容有点粗

XHprof 使用 (转)

原文地址:http://blog.csdn.net/maitiandaozi/article/details/8896293 XHProf是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile. 1.安装XHprof [plain] view plain copy print? wget http://pecl.php.net/get/xhprof-0.9.2.tgz tar zxf x