安裝xhprof拓展
地址: https://pecl.php.net/package-info.php?package=xhprof
。目前公司的環(huán)境還是5.6的版本,所以我這里選擇了0.9.4
的版本(使用2.x的版本不適用php5.6)
下載后解壓進(jìn)入解壓文件
cd xhprof-0.9.4/extension
# 安裝php拓展的三步
phpize
./configure
make && make install
安裝完成之后,添加到php.ini
配置文件
[xhprof]
extension=xhprof.so
; 存放性能收集數(shù)據(jù)的目錄-自定義
xhprof.output_dir=/tmp/xhprof
xhprof使用
xhprof
壓縮包下載之后會(huì)有兩個(gè)xhprof
開頭的文件夾: xhprof_html
,xhprof_lib
,如圖:
xhprof-0.9.4
├── CHANGELOG
├── CREDITS
├── LICENSE
├── README
├── examples
├── extension
├── xhprof_html
└── xhprof_lib
將這兩個(gè)文件夾復(fù)制到項(xiàng)目的目錄下(這里我做測(cè)試直接放到了項(xiàng)目的根目錄下了),隨便找一個(gè)控制器方法:
public function test()
{
// 如果這里出現(xiàn)502使用下面這條語句
// xhprof_enable( XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
xhprof_enable();
// 業(yè)務(wù)代碼
....
$xhprof_data = xhprof_disable();
$XHPROF_ROOT = PROJECT_ROOT_PATH;
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");
$url = "http://localhost/index.php?run=$run_id&source=xhprof_foo";
echo '<a href="'.$url.'">'.$url.'</a>';exit;
}
關(guān)于這里的分析結(jié)果路徑http://localhost/index.php?run=$run_id&source=xhprof_foo
,這個(gè)結(jié)果路徑是調(diào)用的xhprof_html
下的index.php
,所以做測(cè)試的時(shí)候我配置了一個(gè)nginx站點(diǎn)只想xhprof_html
這個(gè)路徑,訪問接口就可以直接輸出分析結(jié)果路徑了挂脑。
點(diǎn)擊鏈接就可以看到各個(gè)過程只想消耗時(shí)間,調(diào)用次數(shù)等:
點(diǎn)擊 View Full Callgraph
還可以生成圖表,圖表需要系統(tǒng)安裝 graphviz
分析結(jié)果各字段含義
指標(biāo) | 含義 |
---|---|
Function Name | 方法名稱 |
Calls | 方法被調(diào)用次數(shù) |
Calls% | 方法調(diào)用次數(shù)在同級(jí)方法總數(shù)調(diào)用次數(shù)中所占的百分比扁掸。 |
Incl.Wall Time(microsec) | 方法執(zhí)行花費(fèi)的時(shí)間,包括子方法的執(zhí)行時(shí)間.(單位:微秒) |
Excl.Wall Time(microsec) | 方法本身執(zhí)行花費(fèi)的時(shí)間,不包括子方法的執(zhí)行時(shí)間.(單位:微秒) |
EWall% | 方法本身執(zhí)行花費(fèi)的時(shí)間百分比. |
Incl. CPU(microsecs) | 方法執(zhí)行花費(fèi)的CPU時(shí)間,包括子方法的執(zhí)行時(shí)間(單位:微秒) |
ICpu% | 方法執(zhí)行花費(fèi)的CPU時(shí)間百分比。 |
Excl. CPU(microsec) | 方法本身執(zhí)行花費(fèi)的CPU時(shí)間,不包括子方法的執(zhí)行時(shí)間(單位:微秒) |
ECPU% | 方法本身執(zhí)行花費(fèi)的CPU時(shí)間百分比最域。 |
Incl.MemUse(bytes) | 方法執(zhí)行占用的內(nèi)存,包括子方法執(zhí)行占用的內(nèi)存(單位:字節(jié)) |
IMemUse% | 方法執(zhí)行占用的內(nèi)存百分比。 |
Excl.MemUse(bytes) | 方法本身執(zhí)行占用的內(nèi)存锈麸,不包括子方法執(zhí)行占用的內(nèi)存镀脂。(單位:字節(jié)) |
EMemUse% | 方法本身執(zhí)行占用的內(nèi)存百分比。 |