在OSX 10.11下安裝 XHProf的經(jīng)驗和教訓(xùn)

[xhprof|OSX|autoconf|m4|Graphviz|libpng]
寫在前面:鑒于我遇到非常多奇葩的問題,我決定好好寫這篇文章震缭,把經(jīng)驗分享給別人。遇到這些問題的原因竟痰,可能是系統(tǒng)原因郊愧,也可能是軟件原因,因為編譯過程漫長蟆融,本人不愿意花太多時間在上面草巡,僅在過程中記下認為的原因。

鑒于本人在查這方面資料的時候型酥,很多人連同Apache山憨,nginx的安裝也一同寫在教程里查乒,讓我有點亂。所以提醒一下萍歉,實際上XHProf與它們關(guān)系不大侣颂,它只是一個php擴展而已档桃。

接下來枪孩,我們就一步一步來安裝吧!

基本部分

  1. 下載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
  1. 編譯安裝
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)系潭陪,我也不太理解,你可以看看這篇博文最蕾。
實際上需要裝兩個東西依溯,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=后的目錄是什么目錄呢黎炉?不知道的話,執(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):

目錄結(jié)構(gòu).png

在網(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é)果:

sample.php.png

點count
result.png

這里就是分析結(jié)果啦争剿!如果想要以圖象形式顯示,點[View Full Callgraph]痊末,當然你還需要安裝Graphviz蚕苇,裝這個,本人遇到大坑(如果你和我都是OSX10.11舌胶,其它版本未測)捆蜀。先看效果:
graphviz.png

安裝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,可以考慮一下方面:

  1. graphviz-gd是否安裝全谤;
  2. graphviz版本可以適當降低
  3. 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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末削饵,一起剝皮案震驚了整個濱河市岩瘦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌葵孤,老刑警劉巖担钮,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尤仍,居然都是意外死亡,警方通過查閱死者的電腦和手機狭姨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門宰啦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饼拍,你說我怎么就攤上這事赡模。” “怎么了师抄?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵漓柑,是天一觀的道長。 經(jīng)常有香客問我叨吮,道長辆布,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任茶鉴,我火速辦了婚禮锋玲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涵叮。我一直安慰自己惭蹂,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布割粮。 她就那樣靜靜地躺著盾碗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舀瓢。 梳的紋絲不亂的頭發(fā)上廷雅,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼榜轿。 笑死幽歼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的谬盐。 我是一名探鬼主播甸私,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼飞傀!你這毒婦竟也來了皇型?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤砸烦,失蹤者是張志新(化名)和其女友劉穎弃鸦,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幢痘,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡唬格,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了颜说。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片购岗。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖门粪,靈堂內(nèi)的尸體忽然破棺而出喊积,到底是詐尸還是另有隱情,我是刑警寧澤玄妈,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布乾吻,位于F島的核電站,受9級特大地震影響拟蜻,放射性物質(zhì)發(fā)生泄漏绎签。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一瞭郑、第九天 我趴在偏房一處隱蔽的房頂上張望辜御。 院中可真熱鬧,春花似錦屈张、人聲如沸擒权。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碳抄。三九已至,卻和暖如春场绿,著一層夾襖步出監(jiān)牢的瞬間剖效,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留璧尸,地道東北人咒林。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像爷光,于是被迫代替她去往敵國和親垫竞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容