在OSX 10.11下安装 XHProf的经验和教训

[xhprof|OSX|autoconf|m4|Graphviz|libpng]
写在前面:鉴于我遇到非常多奇葩的问题,我决定好好写这篇文章,把经验分享给别人。遇到这些问题的原因,可能是系统原因,也可能是软件原因,因为编译过程漫长,本人不愿意花太多时间在上面,仅在过程中记下认为的原因。

鉴于本人在查这方面资料的时候,很多人连同Apache,nginx的安装也一同写在教程里,让我有点乱。所以提醒一下,实际上XHProf与它们关系不大,它只是一个php扩展而已。

接下来,我们就一步一步来安装吧!

基本部分

  1. 下载xhprof,并解压。
    1:版本可以下载最新的0.9.4版本,但本人下载0.9.4版本安装后,使用phpinfo()函数查看时,显示为0.9.2,不知道谁骗了偶(:
    2:OSX默认没有wget,你可以自己安装或在用浏览器下载。
wget http://pecl.php.net/get/xhprof-0.9.3.tgz
tar -zxvf xhprof-0.9.3.tgz
  1. 编译安装
cd ./xhprof-0.9.3/extension/
phpize
./configure --with-php-config=  mp\nmake
sudo make install
make test

这里需要注意几点:
(1) 执行phpize时,可能会报错,结果如下:

Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

这是什么原因呢?因为autoconf没有装,autoconf是什么?
跟Linux/Unix开发有关系,我也不太理解,你可以看看这篇博文。
实际上需要装两个东西,autoconfm4,那安装吧!
地址:http://ftp.gnu.org/gnu/autoconf/和http://ftp.gnu.org/gnu/m4/

wget http://ftp.gnu.org/gnu/m4/m4-1.4.17.tar.gz
tar -zvxf m4-1.4.17.tar.gz
cd m4-1.4.17/
./configure && make && sudo make install
cd ../
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar -zvxf autoconf-2.69.tar.gz
cd autoconf-2.69/
./configure && make && sudo make install

(2)--with-php-config=后的目录是什么目录呢?不知道的话,执行:

which php-config

我这里是/usr/bin/php-config

3.修改php.ini。在php.ini最后加上

extension=xhprof.so
xhprof.output_dir=输出目录

输出目录,默认为/tmp,你可以自己修改,一定要注意该目录的必须有写权限**,直接777吧!本人在这吃过亏。

到这里你的xhprof就算安装完毕了。不过实际上还没完。

使用部分

xhprof既然是php扩展,我们就要理解什么是扩展,本人就把它理解成多了几个牛逼的函数。这里多了四个:
xhprof_enable()
xhprof_disable()
xhprof_sample_enable()
xhprof_sample_disable()
详细可以看这里:http://php.net/manual/zh/book.xhprof.php
simple的是更轻量级版本,所以其实就多了两个。然后怎么用?
先看一下我的目录结构:

目录结构.png

在网站根目录创建xhprof文件夹
examples、xhprof_html、xhprof_lib文件夹是从源代码包里直接复制过来的。
examples 是使用示例文件
xhprof_html是呈现分析结果的web界面
xhprof_lib是性能分析需要的库
再来看一下示例文件sample.php,英文注释已删,并做了一些简单修改。

 0) {
    bar($x - 1);
  }
}

function foo() {
  for ($idx = 0; $idx < 5; $idx++) {
    bar($idx);
    $x = strlen("abc");
  }
}

// 开始分析,在xhprof_enable()和xhprof_disable()之间的是要分析的代码部分
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

foo();

//这里就结束分析了,可见之分析了foo()的执行过程,xhprof_disable()会返回分析的结果
$xhprof_data = xhprof_disable();
print_r($xhprof_data);

//获取xhprof所在的路径
$XHPROF_ROOT = realpath(dirname(__FILE__) .'/..');

include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");

//访问http:///index.php?run=$run_id&source=xhprof_foo 就可以看到统计列表
//是指xhprof_html的路径地址,如下示例:

echo 'count'; 

现在我们来访问http://localhost/xhprof/examples/sample.php 会得到这样的结果:

sample.php.png

点count
在OSX 10.11下安装 XHProf的经验和教训_第1张图片
result.png

这里就是分析结果啦!如果想要以图象形式显示,点[View Full Callgraph],当然你还需要安装Graphviz,装这个,本人遇到大坑(如果你和我都是OSX10.11,其它版本未测)。先看效果:
在OSX 10.11下安装 XHProf的经验和教训_第2张图片
graphviz.png

安装Graphviz可以去它官网下载。
一定要下载graphviz-2.39.20151005.2011.pkg
一定要下载graphviz-2.39.20151005.2011.pkg
一定要下载graphviz-2.39.20151005.2011.pkg
如果你和博主一样,作死下源码编译,或者下载graphviz-2.38.0.pkg,你会遇到一下各种错误,一部分而已,抱歉博主没有整理完全部的错误,有的错误一去不复返,再也找不回。

错误1

failed to execute cmd: " dot -Tpng". stderr: Format: "png" not recognized. Use one of: canon cmap cmapx cmapx_np dot eps fig gv imap imap_np ismap pic plain plain-ext pov ps ps2 svg svgz tk vml vmlz xdot xdot1.2 xdot1.4 '`

错误2:

failed to execute cmd: " dot -Tpng". stderr: `Format: "png" not recognized. Use one of: canon cmap cmapx cmapx_np dot eps fig gv imap imap_np ismap pic plain plain-ext pov ps ps2 svg svgz tk vml vmlz xdot '

编译错误:
graphviz-2.30.0 Or graphviz-2.32.0以前会报这个错:

Undefined symbols for architecture x86_64

graphviz-2.30.0 Or graphviz-2.32.0到graphviz-2.36.0,会报这个:

ln: graphviz/tcl: Operation not permitted
make[5]: *** [install-data-hook] Error 1
make[4]: *** [install-data-am] Error 2
make[3]: *** [install-am] Error 2
make[2]: *** [install-recursive] Error 1
make[1]: *** [install-recursive] Error 1
make: *** [install] Error 2

graphviz-2.38.0 编译不会报错,但是点[View Full Callgraph]出现:

failed to execute cmd: " dot -Tpng". stderr: Format: "png" not recognized. Use one of: canon cmap cmapx cmapx_np dot eps fig gv imap imap_np ismap pic plain plain-ext pov ps ps2 svg svgz tk vml vmlz xdot xdot1.2 xdot1.4 '`

如果出现下面这种:

/usr/include/tk.h:78:11: fatal error: 'X11/Xlib.h' file not found

include

1 error generated.
make[3]: *** [tkStubLib.lo] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

可以这样解决:ln -s /opt/X11/include/X11 /usr/local/include/X11

对于非OSX用户,如遇以上错误1错误2,可以考虑一下方面:

  1. graphviz-gd是否安装;
  2. graphviz版本可以适当降低
  3. libpng可以适当降低
    网上成功过的为graphviz-2.24.0 + libpng-1.5.19,作为参考吧!
    看到有人说出现类似上述错误1错误2,是因为Graphviz没安装,其实不是,没安装的话,会是 Command Not Found.
    最后提醒大家,设置的xhprof.output_dir目录一定要具有写权限,本地直接给权限777就ok。

附几篇参考博文:
http://blog.sina.com.cn/s/blog_721cd3390102uzx8.html
http://www.cnblogs.com/casatwy/archive/2013/01/17/2865241.html
http://www.chenjie.info/1587

原文链接:https://www.funnyang.com/osx-xhprof/

你可能感兴趣的:(在OSX 10.11下安装 XHProf的经验和教训)