国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

利用PHP擴(kuò)展Xhprof分析項(xiàng)目性能實(shí)踐教程

2024-05-04 21:50:26
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、背景

項(xiàng)目即將上線,想通過(guò)一些工具來(lái)分析代碼的穩(wěn)定性和效率,想起在上個(gè)團(tuán)隊(duì)時(shí)使用過(guò)的xhprof擴(kuò)展;因?yàn)閾Q了新電腦,所以需要重新編譯此擴(kuò)展,現(xiàn)將安裝與實(shí)際排查過(guò)程完整記錄下來(lái),方便自己回顧和幫助更多的讀者。

XHProf 是 FaceBook 開(kāi)發(fā)的一個(gè)函數(shù)級(jí)別的 PHP 分層分析器。

數(shù)據(jù)收集部分是一個(gè)基于 C 的 PHP 擴(kuò)展,分析報(bào)告是一系列基于 PHP 的 HTML 導(dǎo)航頁(yè)面。

XHProf 能統(tǒng)計(jì)每個(gè)函數(shù)的調(diào)用次數(shù)、內(nèi)存使用、CPU占用等多項(xiàng)重要的數(shù)據(jù)。

并且 XHProf 還能比較兩個(gè)統(tǒng)計(jì)樣本,或從多個(gè)數(shù)據(jù)樣本中匯總結(jié)果。

XHProf 是分析 PHP 程序執(zhí)行效率的利器,能讓我們得到更底層的的分析數(shù)據(jù)。

下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧

二、操作步驟

安裝擴(kuò)展

配置擴(kuò)展

測(cè)試分析

三、安裝

xhprof擴(kuò)展PHP并不自帶,需要筆者去單獨(dú)安裝它,安裝之后才能使用,筆者這里采用源碼安裝方式,安裝過(guò)程如下

3.1 下載源碼

xhprof在PHP的PECL官方上面已經(jīng)比較老了,筆者的PHP版本為PHP7.1因此,需要在GitHub上下載xhprof上比較新的源碼,參考命令如下

git clone https://github.com/longxinH/xhprof

3.2 檢測(cè)環(huán)境

進(jìn)入編譯的文件夾,參考命令

cd xhprof/extension/

現(xiàn)在筆者需要編譯一下源碼,在編譯之前可以使用phpze來(lái)探測(cè)PHP的環(huán)境,參考命令如下:

phpize

返回結(jié)果如下

  1. Configuring for
  2. PHP Api Version:         20160303 
  3. Zend Module Api No:      20160303 
  4. Zend Extension Api No:   320160303 

3.3 編譯安裝

生成 Makefile,為下一步的編譯做準(zhǔn)備

./configure

返回結(jié)果如下

  1. creating libtool 
  2. appending configuration tag "CXX" to libtool 
  3. configure: creating ./config.status 
  4. config.status: creating config.h 
  5. config.status: config.h is unchanged 

開(kāi)始編譯,并進(jìn)行安裝

make && make install

返回結(jié)果如下

  1. Build complete. 
  2. Don't forget to run 'make test'. 
  3.  
  4. Installing shared extensions:     /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/ 

從返回信息中可以看到已經(jīng)安裝完成,并顯示了擴(kuò)展文件存放的位置

四、配置

在編譯安裝源碼之后,筆者還需要對(duì)PHP的配置文件夾以及xhprof的進(jìn)行一些簡(jiǎn)單的配置,操作過(guò)程如下所示

4.1 找出配置文件位置

要修改PHP的配置首先需要知道配置文件在什么位置,這里可以通過(guò)PHP的命令來(lái)查看配置文件存放位置,參考命令如下:

php --ini

執(zhí)行命令后,返回結(jié)果如下

  1. Configuration File (php.ini) Path: /usr/local/etc/php/7.1 
  2. Loaded Configuration File:         /usr/local/etc/php/7.1/php.ini 
  3. Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d 
  4. Additional .ini files parsed:      /usr/local/etc/php/7.1/conf.d/ext-opcache.ini 

在返回結(jié)果當(dāng)中,可以看到多個(gè)配置文件的路徑,筆者所需要的是第二個(gè)文件php.ini

查看擴(kuò)展目錄存放位置,參考命令如下

cat /usr/local/etc/php/7.1/php.ini | grep extension_dir

返回結(jié)果如下

  1. extension_dir = "/usr/local/lib/php/pecl/20160303" 
  2. ; extension_dir = "ext" 
  3. ; Be sure to appropriately set the extension_dir directive. 
  4. ;sqlite3.extension_dir = 

4.2 修改配置

從返回的結(jié)果當(dāng)中,可以看到擴(kuò)展的存放目錄位置如下

/usr/local/lib/php/pecl/20160303

現(xiàn)在需要將剛才編譯好的xhprof擴(kuò)展復(fù)制到該目錄當(dāng)中,參考命令如下

cp /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/xhprof.so /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/

通過(guò)vim編輯器編輯配置文件,參考命令如下

vim /usr/local/etc/php/7.1/php.ini

在配置文件尾部增加xhprof的配置,以及自定義一個(gè)用來(lái)保存xhprof生成的源文件參考配置如下:

  1. [xhprof] 
  2. extension=xhprof.so 
  3. xhprof.output_dir=/data/www/xhprof/save_output_dir 

4.3 重啟生效

保存好之后,筆者重啟php-fpm讓其配置生效,重啟命令可以通過(guò)brew命令來(lái)查看,參考命令如下:

brew info php@7.1

在命令執(zhí)行后,返回的信息中可以看到如下信息

  1. To have launchd start php@7.1 now and restart at login: 
  2.  brew services start php@7.1 
  3. Or, if you don't want/need a background service you can just run: 
  4.  php-fpm 

因此筆者構(gòu)造的重啟PHP-FPM命令如下:

brew services restart php@7.1

重啟完成后,返回結(jié)果如下

  1. Stopping `php@7.1`... (might take a while
  2. ==> Successfully stopped `php@7.1` (label: homebrew.mxcl.php@7.1) 
  3. ==> Successfully started `php@7.1` (label: homebrew.mxcl.php@7.1) 

4.4 驗(yàn)證安裝

現(xiàn)在驗(yàn)證xhprof擴(kuò)展是否已經(jīng)安裝完成,參考命令如下

php -m | grep xhprof

命令執(zhí)行后,安裝擴(kuò)展成功的返回結(jié)果將會(huì)顯示xhprof,如下圖所示

利用PHP擴(kuò)展Xhprof分析項(xiàng)目性能實(shí)踐教程

五、測(cè)試

經(jīng)過(guò)上面的操作筆者已經(jīng)成功的安裝與配置,現(xiàn)在需要用PHP代碼來(lái)進(jìn)行驗(yàn)證xhprof的分析效果

5.1 創(chuàng)建虛擬主機(jī)

首先創(chuàng)建一個(gè)虛擬主機(jī),讓用戶可以通過(guò)瀏覽器訪問(wèn)所訪問(wèn),創(chuàng)建虛擬主機(jī)需要有一個(gè)根目錄,并編輯nginx配置文件,具體操作如下:

5.1.1 創(chuàng)建項(xiàng)目目錄

創(chuàng)建項(xiàng)目根目錄,參考命令如下

mkdir -p /Users/song/mycode/work/test

創(chuàng)建成功之后,筆者需要將之前git拉下來(lái)的部分代碼復(fù)制到項(xiàng)目根目錄當(dāng)中,參考命令如下:

cp -r xhprof/xhprof_html /Users/song/mycode/work/test/

cp -r xhprof/xhprof_lib /Users/song/mycode/work/test/

5.1.2 編輯配置文件

添加配置文件,參考命令

/usr/local/etc/nginx/nginx.conf

添加配置文件如下:

  1. server { 
  2.  listen  80; 
  3.  server_name test.localhost; 
  4.  
  5.  root /Users/song/mycode/work/test; 
  6.  index index.html index.htm index.php; 
  7.    
  8.  location / { 
  9.   try_files $uri $uri/ /index.php?$query_string
  10.  } 
  11.  
  12.  
  13.  location ~ /.php$ { 
  14.   fastcgi_pass 127.0.0.1:9000; 
  15.   fastcgi_index index.php; 
  16.   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
  17.   include  fastcgi_params; 
  18.  } 
  19.  

在/etc/hosts文件中增加入一行解析記錄,記錄內(nèi)容如下:

127.0.0.1 test.localhost

5.2 新建測(cè)試代碼

在git倉(cāng)庫(kù)的examples文件夾下,已經(jīng)有了一份demo代碼,不過(guò)這份代碼的注釋都是英文,而且排版方式也不易筆者自己理解,因此筆者重新編輯了此文件,參考步驟如下命令

使用vim新建一個(gè)PHP文件

vim /Users/song/mycode/work/test/test.php

在文件中加入以下代碼:

  1. //加載所需文件 
  2. include_once "./xhprof_lib/utils/xhprof_lib.php"
  3. include_once "./xhprof_lib/utils/xhprof_runs.php"
  4.  
  5. //隨意定義一個(gè)函數(shù) 
  6. function test($max
  7.  for ($idx = 0; $idx < $max$idx++) { 
  8.   echo ''
  9.  } 
  10.  
  11. //定義測(cè)試方法 
  12. function a() 
  13.  test(rand(1000,5000)); 
  14.  
  15. //開(kāi)始分析 
  16. xhprof_enable(); 
  17.  
  18. //需要分析的函數(shù) 
  19. a(); 
  20.  
  21. //結(jié)束分析 
  22. $xhprof_data = xhprof_disable(); 
  23. //實(shí)例化xhprof類 
  24. $xhprof_runs = new XHProfRuns_Default(); 
  25. //獲取當(dāng)前當(dāng)前頁(yè)面分析結(jié)果 
  26. $run_id = $xhprof_runs->save_run($xhprof_data"xhprof_foo"); 
  27.  
  28. echo "/nhttp://test.localhost/xhprof/xhprof_html/index.php?run=$run_id&source=xhprof_foo/n"

保存代碼之后,通過(guò)瀏覽器訪問(wèn)對(duì)應(yīng)的URL地址,URL地址如下所示

http://test.localhost/xhprof/test.php

5.3 結(jié)果分析

運(yùn)行后結(jié)果,如下圖:

利用PHP擴(kuò)展Xhprof分析項(xiàng)目性能實(shí)踐教程

在頁(yè)面中可以看到一個(gè)URL地址,復(fù)制并打開(kāi)此URL地址之后,便能看到此代碼的分析結(jié)果,如下圖所示

利用PHP擴(kuò)展Xhprof分析項(xiàng)目性能實(shí)踐教程

在頁(yè)面中有一個(gè)列表,展示了每一個(gè)方法所消耗的時(shí)間,如果覺(jué)得列表的方式表示不夠清晰,點(diǎn)擊頁(yè)面中的 View Full Callgraph 鏈接可以直接生成一個(gè)圖片,如下圖所示

利用PHP擴(kuò)展Xhprof分析項(xiàng)目性能實(shí)踐教程

在圖中很清晰的可以看到執(zhí)行時(shí)間都消耗在test方法上,因此筆者可以針對(duì)這個(gè)方法進(jìn)行針對(duì)性的優(yōu)化。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南安市| 荃湾区| 政和县| 永康市| 和龙市| 柳河县| 诸暨市| 大安市| 邵阳县| 宁国市| 吴忠市| 象山县| 乐清市| 河北省| 河曲县| 南宫市| 墨脱县| 莎车县| 兴和县| 道真| 西昌市| 胶南市| 泾川县| 三门县| 贵州省| 云和县| 富裕县| 札达县| 翼城县| 罗田县| 道孚县| 曲沃县| 木里| 宣武区| 温泉县| 高清| 濮阳县| 大丰市| 凤翔县| 哈尔滨市| 肥城市|