安裝和使用Xhprof,安裝使用Xhprof
安裝xhprof(如果有錯誤,要make clean,重新編譯)
1 下載xhprof
#wget (去官網下載,我沒從官網下載,放到yii裡就各種不能用,後來重新編譯了就好了,如果進行不下去的時候又找不到原因,可以重新編譯一下)
#tar zxf xx.gz(下下來的檔案)
2 cd xhprof
cd extension
/usr/local/php/bin/phpize(用自己環境裡的phpize路徑)
./configure --enable-xhprof --with-php-config=/usr/local/php/bin/php-config(你自己環境的php-config路徑,路徑錯了安裝肯定失敗)
make && make install(如果有報錯,記得先make clean 再做重新編譯,如果還是不行,就得換個版本重新編譯了,這個地方我試了好幾遍才成功比較鬱悶)
3 建立檔案/usr/local/etc/php/php.d/xhprof.ini(或者在php.ini最後加上,都行)
內容:extension=xhprof.so;
xhprof.output_dir=/data/logs/Appstore/Xhprof/
4 開啟phpinfo() 查看擴充是否加上(如果沒有,重新編譯,直到成功為止)
如果不需要顯示圖,到現在就可以用了,自己建一個xhprof的網域名稱,然後到example裡的sample.php裡進行測試就行了
如果需要顯示圖,那接著往下走
安裝png(確認線上是否有libpng擴充,如果有就不需要安裝了)
1 wget http://nchc.dl.sourceforge.net/project/libpng/libpng15/1.5.1/libpng-1.5.1.tar.gz
2 tar zxf libpng-1.5.1.tar.gz
3 cd libpng-1.5.1
4 ./configure --with-php-config=/usr/local/php/bin/php-config
5 make
6 make install
安裝完以後開始裝Graphviz
安裝Graphviz
1 wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.24.0.tar.gz
2 tar zxf graphviz-2.24.0.tar.gz
3 cd graphviz-2.24.0
4./configure --with-php-config=/usr/local/php/bin/php-config --with-png=yes
5 make
6 make install
完成以後如果產生/usr/bin/dot則成功
這時候你會發現圖還是顯示不出來,提示dot - png fail,是說他找不到dot的路徑,到你的xhprof/xhprof_lib/utils/callgraph_utils.php 裡的dot路徑為/usr/bin/dot(你自己產生的dot地址)
這時候圖基本上就出來了
見下面的圖,是不是很壯觀,出來的時候成就感爆棚
下面說怎麼融合到你自己的代碼裡面去
在分析時跳過內建函數 xhprof_enable(XHPROF_FLAGS_MEMORY ,array('ignored_functions' => array('call_user_func','call_user_func_array')));
使用機制:
我是自己封裝了個類,也可以直接用
在函數的開頭調用類以後會在你的xhprof.output_dir裡產生一個檔案
在/data/logs/Appstore/Xhprof/下會產生比如54a3a2606e75b.top-size-10-page-1-list.json.xhprof的檔案,
如果 $run_id = $xhprofRuns->save_run($xhprofData, $name); 這個name預設是xhprof_foo,如果你想在產生的檔案裡直接看到是哪個介面產生的解析檔案,
可以在這塊指定name,我是這樣做的
$name = str_replace('/', '-', $_SERVER['REQUEST_URI']);
$name = substr($name, 1);
$xhprofRuns = new XHProfRuns_Default();
$run_id = $xhprofRuns->save_run($xhprofData, $name);
然後根據你自己配置的網域名稱就可以看效果了,比如
訪問http://xxx/xhprof_html/index.php?run=54a3a2606e75b&source=top-size-10-page-1-list.json(這塊的source是你自己定義的name,如果沒定義,就不用改,如果不改,會看不到內容)就可以看到了
點view full callgraph就可以點擊圖片看細節了,比較清晰明了
http://xxx/xhprof_html/callgraph.php?run=54a3a2606e75b&source=top-size-10-page-1-list.json