xhprof的使用

簡介

XHProf是一個分層PHP性能分析工具。 XHProf是一個分層PHP性能分析工具。它報告函數級別的請求次數和各類指標,包括阻塞時間,CPU時間和內存使用狀況。一個函數的開銷,可細分紅調用者和被調用者的開銷,XHProf數據收集階段,它記錄調用次數的追蹤和包容性的指標弧在動態callgraph的一個程序。它獨有的數據計算的報告/後處理階段。在數據收集時,XHProfd經過檢測循環來處理遞歸的函數調用,並經過給遞歸調用中每一個深度的調用一個有用的命名來避開死循環。XHProf分析報告有助於理解被執行的代碼的結構,它有一個簡單的HTML的用戶界面( PHP寫成的)。基於瀏覽器的性能分析用戶界面能更容易查看,或是與同行們分享成果。也能繪製調用關係圖。(來自百度百科)php

前提

個人PHP版本是PHP7:html

PHP版本

而xhprof支持PHP7的庫請在longxinH-xhprof查看。nginx

longxinH/xhprof

備註:我以前在phacility克隆的,不過安裝失敗,緣由就是個人PHP版本是PHP7,而phacility版本的並不支持。(採坑呢~~)git

安裝步驟

當作一個php項目!clone別人php代碼放哪一個目錄你本身定 1.編譯安裝github

cd /Users/birjemin/Developer/Php
git clone https://github.com/longxinH/xhprof
cd xhprof/extension
phpize
./configure
make
make install
複製代碼

編譯成功以後

2.配置文件vim

cd /usr/local/etc/php/7.0/conf.d
vim ext-xhprof.ini
複製代碼

添加內容(這個就是編譯成功以後的路徑,見上圖)瀏覽器

[xhprof]
extension="/usr/local/Cellar/php70/7.0.14_7/lib/php/extensions/no-debug-non-zts-20151012/xhprof.so"
複製代碼

3.重啓php-fpm(視我的重啓方式而定,個人重啓方式是這樣的)bash

cd /usr/local/etc/php/7.0/
sudo killall php-fpm
sudo /usr/local/Cellar/php70/7.0.14_7/sbin/php-fpm -D
複製代碼

4.查看是否安裝成功php7

php -m

phpinfo

恭喜安裝成功!app

使用步驟

1.若是使用呢?兩種方法,第一種就是把xhprof_lib.php和xhprof_runs.php拷貝到項目中,第二種就是用絕對路徑引入這兩個文件,推薦第一種,這樣別人clone的你的項目,不須要作啥。

2.創建兩個開啓函數(isDev()是判斷本地環境的意思,請視狀況刪除)

  • 開啓xhprof
function enableXhprof()
{
    isDev() && xhprof_enable(0, []);
}
複製代碼
  • 運行xhprof(xhprof_lib.php和xhprof_runs.php能夠拷貝到項目的,請確保include_once請夠加載這兩個文件)。
function disableXhprof()
{
    if (isDev()) {
        $xhprof_data = xhprof_disable();
        include_once app_path() . "/xhprof_lib.php";
        include_once app_path() . "/xhprof_runs.php";
        $xhprof_runs = new \XHProfRuns_Default();
        $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
        #echo $run_id;
    }
}
複製代碼

3.能夠在須要監聽的接口中代碼片斷前面加上enableXhprof(),後面加上disableXhprof()就行了。接下來就能夠分析這段代碼了。(請確保這兩個函數全局訪問)

4.將克隆的xprof配置虛擬主機,這個和你的項目同樣的,就把xprof也當作一個項目,配置成瀏覽器可訪問。好比個人配置:

  • host: 127.0.0.1 local.xhprof.com
  • nginx server conf
server {
  listen       80;
  server_name  local.xhprof.com;
  access_log   logs/xhprof.access.log  main;
  autoindex on;
  location / {
    root  /Users/birjemin/Developer/Php/xhprof;
    index  index.html index.htm index.php;
    try_files $uri $uri/ /index.php?$query_string;
  }
  location ~ \.php$ {
    root           /Users/birjemin/Developer/Php/xhprof;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_intercept_errors    on;
    include        fastcgi_params;
  }
}
複製代碼

5.重啓nginx,瀏覽器訪問local.xhprof.com看看能不能訪問(沒有目錄??你是否是瀏覽器沒法訪問目錄??權限沒開。。本身配置一下)

xhprof網站

6.在postman或者瀏覽器訪問接口,轉啊轉,好了以後就能夠去 http://local.xhprof.com/xhprof_html/查看了。(圖我就不截了。。下次講一下xgui的使用)

示例

遇到的問題

1.php -v的版本和phpinfo()的版本不一致,以下圖:

php -v

phpinfo

解決方法:更改php cli的默認版本

  • 我用的是bash
vim .bash_profile
複製代碼
  • 添加兩行
# PHP -v
export PATH="/usr/local/Cellar/php70/7.0.14_7/bin:$PATH"
複製代碼
  • 生效
source .bash_profile
複製代碼

2.編譯成功,可是php -m 沒有 xhprof。

xhprof支持PHP7的庫請在longxinH-xhprof查看!!!!

備註

全程經歷了2.5h吧~~~不過文章也寫了2.5h。哈哈哈哈~這個東西和xdebug不同的,這個是分析性能瓶頸的,可讓你優化代碼。xdebug主要用於調試,我下次寫一個xdebug安裝的過程。

參考

  1. www.jianshu.com/p/38e3ae819…
  2. juejin.im/post/5860d2…
  3. blog.csdn.net/qq_28602957…
  4. baike.baidu.com/item/xhprof…
相關文章
相關標籤/搜索