什么是 Xhprof?
XHProf是facebook 开发的一个测试php性能的扩展,本文记录了在PHP应用中使用XHProf对PHP进行性能优化,查找性能瓶颈的方法。

它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。

XHProf分析报告有助于理解被执行的代码的结构,它有一个简单的HTML的用户界面( PHP写成的)。

基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。

也能绘制调用关系图。

Xhprof 与 Xdebug 区别
Xdebug 是一个开放源代码的PHP程序调试器(即一个Debug工具)。

对于本地开发环境来说,进行性能分析 Xdebug 是够用了。

但如果是线上环境的话,Xdebug 消耗较大,配置也不够灵活。

下载安装Xhprof

直接从github下载zip压缩包,地址:https://github.com/longxinH/xhprof

# unzip xhprof-master.zip
# cd xhprof-master
# cd extension/
# phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-xhporf
# make && make install

 # vim /usr/local/php/etc/php.ini  //编辑php.ini,添加如下代码
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-/xhprof.so
# service php-fpm restart  //重启
# php -m | grep xhprof //命令查看是否安装xhprof扩展

配置到项目中进行性能分析

我在同测试项目的Linux服务器里搭建了虚拟主机,把xhprof定义了一个域名访问

我这使用的Nginx配置的虚拟主机,域名为:http://myxhprof.com,在你们搭建完成之后,可以试着访问一下sample.php文件,这是一个小Demo,有开始和结束为止,文件中有注释。

我所在的测试项目所用框架是tp,进入解压包目录下中的xhprof_lib目录,把utils目录拷贝到了项目目录下,我放到了Lib目录下,然后在common的公共函数文件中写入一个方法,代码如下,当然这个函数我简单的定义了一下,如果您在实际生产环境中分析的话,可以专门定义一个区分线上线上的标识~

//common文件自定义函数
function xhprof ()
{
$xhprof_data = xhprof_disable();
include_once "/data/wwwroot/default/gaiban/Lib/utils/xhprof_lib.php";
include_once "/data/wwwroot/default/gaiban/Lib/utils/xhprof_runs.php";
$xhprof_runs = new \XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo"); echo '开始性能分析地址:<a href="http://myxhprof.com/index.php?run='.$run_id .'&source=xhprof_foo" target="_blank">点击分析</a>';
}
//测试项目访问的方法
<?php
class Test {
public function index()
{
//-------------------------------------------------------------程序运行开始函数位置
xhprof_enable();//---------------------------------------------程序运行开始函数位置
//-------------------------------------------------------------程序运行开始函数位置
$Rand_hot = $this->Rand_hot_article();
$Hot_list = $this->hot_acticle();
$links = $this->links();
$this->assign('links',$links);
$this->gg = $this->gonggao_merge();
$TagList = $this->Tags();
$Newlist_Page = $this->New_Article();
$Newlist = $Newlist_Page['list'];
$Page = $Newlist_Page['page'];
//-------------------------------------------------------------程序运行结束函数位置
xhprof();//------------这里是common自定义的函数位置--------------程序运行结束函数位置
//-------------------------------------------------------------程序运行结束函数位置
$this->assign('Hot_list',$Hot_list);
$this->assign('Rand_list',$Rand_hot);
$this->assign('NewLIST',$Newlist);
$this->assign('Page',$Page);
$this->assign('TagList',$TagList);
$this->display();
}

然后访问项目

形象化的查看分析结果

使用xhprof_disable完成性能分析并且获取到分析结果之后,我们通常不会直接输出结果,因为这样的结果是以数组形式组织的,看起来并不直观,幸运的是,xhprof提供了基于web的图形界面对分析结果进行查看。

在使用之前,请先确保服务器安装了graphviz工具,否则在生成监控图表的时候回出现以下错误:

failed to execute cmd: " dot -Tpng". stderr: `sh: dot: command not found '

解决办法直接yum安装:

#  yum install graphviz

如果安装好了graphviz,仍然出现”failed to execute cmd”,检查下服务器上的php.ini中disable_functions这项是不是限制了proc_open,因为在xhprof_lib/utils/callgraph_utils.php的xhprof_generate_image_by_dot中使用了proc_open函数,或者设置“disable_functions = “ 即可,一般没有必要在php.ini中关闭函数使用,人为修炼代码技术即可。

解决完错误,再次请求,出现下面效果图。注意到中间的[View Full Callgraph]链接,通过该链接我们可以看到图形化的分析结果。

点击局部,可以看到大图。

以上,大家可以看到 函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。

图中红色的部分为性能比较低,耗时比较长的部分,我们可以根据根据哪些函数被标记为红色对系统的代码进行优化

Centos下给PHP7添加Xhprof性能分析的更多相关文章

  1. PHP拓展 - xhprof性能分析工具

    Windows安装 参考:https://www.cnblogs.com/buexplain/p/4821619.html dll文件下载:https://windows.php.net/downlo ...

  2. centos下python中添加easygui模块

    前提:python中要集成Tkinter,Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同 ...

  3. 使用 xhprof 进行 php 的性能分析

    基于本机环境(php7,macos) 1.xhprof 扩展 php7 下安装 xhprof 扩展: git clone https://github.com/longxinH/xhprof cd x ...

  4. 记一次docker问题定位(perf,iostat等性能分析)

    背景 最近参与的项目是基于 OpenStack 提供容器管理能力,丰富公司 IaaS 平台的能力.日常主要工作就是在开源的 novadocker 项目(开源社区已停止开发)基础上进行增强,与公司的其他 ...

  5. php性能分析利器:xhprof

    xhprof是facebook团队开发的用于研究php性能的扩展,并且提供了图形化的界面展示性能参数和过程.对于各种php的项目的性能瓶颈研究有一定帮助,值得一用. 我在上一篇<Dockerfi ...

  6. PHP 性能分析第一篇: Xhprof & Xhgui 介绍

    [前言]这是国外知名博主 Davey Shafik所撰写的 PHP 应用性能分析系列的第一篇,阅读第二篇可深入了解 xhgui,第三篇则关注于性能调优实践. 什么是性能分析? 性能分析是衡量应用程序在 ...

  7. PHP性能分析——xhprof(window 安装xhporf)

    1 下载xhprof的php扩展 因为官方的xhprof不支持php7,所以采用tideways版本的xhprof 下载地址:windows版tideways_xhprof 将windows版的dll ...

  8. PHP 性能分析第一篇: Intro to Xhprof & Xhgui

    [前言]这是国外知名博主 Davey Shafik所撰写的 PHP 应用性能分析系列的第一篇,阅读第二篇可深入了解 xhgui,第三篇则关注于性能调优实践. 原文链接如下: https://blog. ...

  9. CentOS下性能监测工具 dstat

    原文链接:http://www.bkjia.com/Linuxjc/935113.html 参考链接:https://linux.cn/article-3215-1.html,http://lhfli ...

随机推荐

  1. Json与数组

    今天趁着看源代码的同时,记录学习的小知识. 一.String.Split 方法有6个重载函数: 1) public string[] Split(params char[] separator)2) ...

  2. 微软笔试题-highways

    题目大意 一条单向的高速公路上有N辆车,在0时刻,每辆车分别在起点A[0],A[1]....处开始从北向南出发,每辆车有个终点B[0],B[1]....且每辆车有个限制速度 V[0],V[1]... ...

  3. poj_3628 动态规划

    题目大意 有N个数字,大小为a[i], 给定一个数S,用这N个数中的某些数加起来使得结果sum>= S,且sum-S最小,求该最小的sum-S值. 题目分析 题意中可知,这N个数字的和肯定大于S ...

  4. 移动端ios中click点击失效

    原因: Safari应该有某种机制用来节约资源,就是如果元素摸起来不像可以点的,就不给他响应事件. 所以,需要在点击的元素上加上{cursor:pointer},就解决了.当然还有别的方法,检点来说就 ...

  5. 【BZOJ3195】[Jxoi2012]奇怪的道路 状压DP

    [BZOJ3195][Jxoi2012]奇怪的道路 Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座 ...

  6. ios 一个正则表达式测试(只可输入中文、字母和数字)

    一个正则表达式测试(只可输入中文.字母和数字) 在项目中碰到了正则表达式的运用,正则还是非常强大的,不管什么编程语言,基本上都可以用到.之前在用java时特别是对用户名或密码使用正则非常爽,写 脚本上 ...

  7. JavaScript学习(5)-Image对象和动态HTML

    JavaScript学习5 1.image 对象 对象引用 document.images[n] document.images["imageName"] document.ima ...

  8. ipconfig /flushdns

    C:\Users\sas>ipconfig /flushdns Windows IP 配置 已成功刷新 DNS 解析缓存. C:\Users\sas>ipconfig --help 错误: ...

  9. webpack4学习笔记(二)

    webpack打包各种javascript文件 (本文只是提供一个学习记录,大部分内容来自网络) 一,打包js文件和es6代码 1,webpack命令打包js文件 Tip: 在webpack4.x之前 ...

  10. Java 8 : Predicate和Consumer接口

    1.consumer jdk 1.8 的 Iterable 接口中的 forEach 默认方法: public interface Iterable<T> { default void f ...