[xhprof|OSX|autoconf|m4|Graphviz|libpng]
寫在前面:鑒于我遇到非常多奇葩的問題,我決定好好寫這篇文章震缭,把經(jīng)驗分享給別人。遇到這些問題的原因竟痰,可能是系統(tǒng)原因郊愧,也可能是軟件原因,因為編譯過程漫長蟆融,本人不愿意花太多時間在上面草巡,僅在過程中記下認為的原因。
鑒于本人在查這方面資料的時候型酥,很多人連同Apache山憨,nginx的安裝也一同寫在教程里查乒,讓我有點亂。所以提醒一下萍歉,實際上XHProf與它們關(guān)系不大侣颂,它只是一個php擴展而已档桃。
接下來枪孩,我們就一步一步來安裝吧!
基本部分
- 下載xhprof藻肄,并解壓蔑舞。
注 1:版本可以下載最新的0.9.4版本,但本人下載0.9.4版本安裝后嘹屯,使用phpinfo()
函數(shù)查看時攻询,顯示為0.9.2,不知道誰騙了偶(:
注 2:OSX默認沒有wget州弟,你可以自己安裝或在用瀏覽器下載钧栖。
wget http://pecl.php.net/get/xhprof-0.9.3.tgz
tar -zxvf xhprof-0.9.3.tgz
- 編譯安裝
cd ./xhprof-0.9.3/extension/
phpize
./configure --with-php-config= mp\nmake
sudo make install
make test
這里需要注意幾點:
(1) 執(zhí)行phpize
時,可能會報錯婆翔,結(jié)果如下:
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開發(fā)有關(guān)系潭陪,我也不太理解,你可以看看這篇博文最蕾。
實際上需要裝兩個東西依溯,autoconf和m4,那安裝吧瘟则!
地址: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=
后的目錄是什么目錄呢黎炉?不知道的話,執(zhí)行:
which php-config
我這里是/usr/bin/php-config
3.修改php.ini醋拧。在php.ini最后加上
extension=xhprof.so
xhprof.output_dir=輸出目錄
輸出目錄慷嗜,默認為/tmp,你可以自己修改趁仙,一定要注意該目錄的必須有寫權(quán)限**洪添,直接777吧!本人在這吃過虧雀费。
到這里你的xhprof就算安裝完畢了干奢。不過實際上還沒完。
使用部分
xhprof既然是php擴展盏袄,我們就要理解什么是擴展忿峻,本人就把它理解成多了幾個牛逼的函數(shù)薄啥。這里多了四個:
xhprof_enable()
xhprof_disable()
xhprof_sample_enable()
xhprof_sample_disable()
詳細可以看這里:http://php.net/manual/zh/book.xhprof.php
帶simple
的是更輕量級版本,所以其實就多了兩個逛尚。然后怎么用垄惧?
先看一下我的目錄結(jié)構(gòu):
在網(wǎng)站根目錄創(chuàng)建xhprof文件夾
examples、xhprof_html绰寞、xhprof_lib文件夾是從源代碼包里直接復(fù)制過來的到逊。
examples 是使用示例文件
xhprof_html是呈現(xiàn)分析結(jié)果的web界面
xhprof_lib是性能分析需要的庫
再來看一下示例文件sample.php,英文注釋已刪滤钱,并做了一些簡單修改觉壶。
<?php
//foo()是要分析的函數(shù)
function bar($x) {
if ($x > 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();
//這里就結(jié)束分析了件缸,可見之分析了foo()的執(zhí)行過程铜靶,xhprof_disable()會返回分析的結(jié)果
$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://<xhprof-ui-address>/index.php?run=$run_id&source=xhprof_foo 就可以看到統(tǒng)計列表
//<xhprof-ui-address>是指xhprof_html的路徑地址他炊,如下示例:
echo '<a href="http://localhost/xhprof/xhprof_html/index.php?run='.$run_id.'&source=xhprof_foo" target="_blank">count</a>';
現(xiàn)在我們來訪問http://localhost/xhprof/examples/sample.php 會得到這樣的結(jié)果:
點count
這里就是分析結(jié)果啦争剿!如果想要以圖象形式顯示,點[View Full Callgraph]痊末,當然你還需要安裝Graphviz蚕苇,裝這個,本人遇到大坑(如果你和我都是OSX10.11舌胶,其它版本未測)捆蜀。先看效果:
安裝Graphviz可以去它官網(wǎng)下載。
一定要下載graphviz-2.39.20151005.2011.pkg
一定要下載graphviz-2.39.20151005.2011.pkg
一定要下載graphviz-2.39.20151005.2011.pkg
如果你和博主一樣幔嫂,作死下源碼編譯辆它,或者下載graphviz-2.38.0.pkg,你會遇到一下各種錯誤履恩,一部分而已锰茉,抱歉博主沒有整理完全部的錯誤,有的錯誤一去不復(fù)返切心,再也找不回飒筑。
錯誤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]出現(xiàn):
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 '`
如果出現(xiàn)下面這種:
/usr/include/tk.h:78:11: fatal error: 'X11/Xlib.h' file not found
include <X11/Xlib.h>
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,可以考慮一下方面:
- graphviz-gd是否安裝全谤;
- graphviz版本可以適當降低
- libpng可以適當降低
網(wǎng)上成功過的為graphviz-2.24.0 + libpng-1.5.19肤晓,作為參考吧!
看到有人說出現(xiàn)類似上述錯誤1錯誤2,是因為Graphviz沒安裝补憾,其實不是漫萄,沒安裝的話,會是 Command Not Found.
最后提醒大家盈匾,設(shè)置的xhprof.output_dir目錄一定要具有寫權(quán)限腾务,本地直接給權(quán)限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