php配置 xhprof性能分析工具

一、工具

xhprof是一款性能分析工具,在php開發中可以精確分析到每行代碼每個方法所消耗的時間和性能等。

二、安裝xhprof

我是在本地使用phpstudy的php7.3.4nts 集成環境,若你要是linux環境可以參考xhprof安裝和使用方法
下載方式你可以選擇

  1. 官網下載 下載 選擇合適你的版本
  2. csdn下載
  3. 我的百度網盤 下載 提取碼 i705

下載好後將php_xhprof.dll 文件配置在本地php安裝目錄\ext 裏,然後修改php.ini文件

extension=php_xhprof.dll
xhprof.output_dir="D:\caoxiukang\probject\project\xhprof_log" // 日誌文件的目錄

此時拓展文件已經裝好頁面輸出phpinfo() 查看
在這裏插入圖片描述
則爲成功。
然後配置xhprof基礎文件,下載地址百度網盤 提取碼:aydr
你也可以去官網下載 xhprof
下載後我解壓到 圖一配置的目錄下
xhprof目錄

三、調試

解壓到這裏就好了,然後我們在需要分析的代碼裏配置調試

測試代碼
上圖中地17 行就是我自己的代碼,第19行需要配置xhprof的安裝地址,也就是圖2解壓到的地址。
然後調用這個接口,然後在這個目錄下會生成日誌文件。
在這裏插入圖片描述
這個就是生成的日誌,日誌文件名前面一部分是 xhprof運行編號,後面的getColumnGoods是代碼裏自己配置的名字。這樣子就可以直接查看了。但是不是很直觀。需要配置站點。

打開xhprof-0.9.4目錄下會發現有xhprof_html 目錄,這個目錄就是用來將日誌文件解析到瀏覽器上的。
根目錄
配置的站點需要將入庫文件寫成index.php文件。配置好後訪問如下

四、表格的方式

在這裏插入圖片描述
我訪問的地址是 http://127.0.0.1:3000/?run=5e97f92ec9c7e&source=getColumnGoods&all=1
run是生產的編號 source 是圖三代碼裏設置的後綴。
下面的部分就是分析出來代碼每行運行的結果。

五、圖表方式 -graphviz

其實上面的表格查看方式以及很清晰了,也可以選擇以圖表方式查看
安裝 graphviz 百度網盤地址 提取碼 e1wh 下載安裝到隨意地址。
下載好了然後 點擊頁面上的 [View Full Callgraph]
在這裏插入圖片描述
排錯
1.有的可會出現 Xhprof graphviz Warning: proc_open() [function.proc-open]: CreateProcess failed, error code 錯誤這時需要去php.ini裏將 disable_functions 裏的proc_open 方法去掉。
2.如果去掉後還有報錯,那就去
xhprof_log\xhprof-0.9.4\xhprof_lib\utils\callgraph_utils.php 的 112行proc_open的方法前面加@ 方法
3.如故還報錯,那可能就是graphviz的安裝目錄有問題,需要改一下。

$process = proc_open($cmd, $descriptorspec, $pipes);
  if (is_resource($process)) {
    fwrite($pipes[0], $dot_script);
    fclose($pipes[0]);
 
    $output = stream_get_contents($pipes[1]);
 
    $err = stream_get_contents($pipes[2]);
    if (!empty($err)) {
      print "failed to execute cmd: \"$cmd\". stderr: `$err'\n";
      exit;
    }
 
    fclose($pipes[2]);
    fclose($pipes[1]);
    proc_close($process);
    return $output;
  }
  print "failed to execute cmd \"$cmd\"";
  exit();
}

將原來這塊代碼修改如上就可以了。

然後可以打開圖表如下。
在這裏插入圖片描述
啊啊啊,不敢打開看,頭皮發麻,趕緊優化代碼去。

六、分析

具體每個參數作用根據如下:
Function Name:方法名稱。

Calls:方法被調用的次數。

Calls%:方法調用次數在同級方法總數調用次數中所佔的百分比。

Incl.Wall Time(microsec):方法執行花費的時間,包括子方法的執行時間。(單位:微秒)

IWall%:方法執行花費的時間百分比。

Excl. Wall Time(microsec):方法本身執行花費的時間,不包括子方法的執行時間。(單位:微秒)

EWall%:方法本身執行花費的時間百分比。

Incl. CPU(microsecs):方法執行花費的CPU時間,包括子方法的執行時間。(單位:微秒)

ICpu%:方法執行花費的CPU時間百分比。

Excl. CPU(microsec):方法本身執行花費的CPU時間,不包括子方法的執行時間。(單位:微秒)

ECPU%:方法本身執行花費的CPU時間百分比。

Incl.MemUse(bytes):方法執行佔用的內存,包括子方法執行佔用的內存。(單位:字節)

IMemUse%:方法執行佔用的內存百分比。

Excl.MemUse(bytes):方法本身執行佔用的內存,不包括子方法執行佔用的內存。(單位:字節)

EMemUse%:方法本身執行佔用的內存百分比。

Incl.PeakMemUse(bytes):Incl.MemUse峯值。(單位:字節)

IPeakMemUse%:Incl.MemUse峯值百分比。

Excl.PeakMemUse(bytes):Excl.MemUse峯值。單位:(字節)

EPeakMemUse%:Excl.MemUse峯值百分比。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章