摘要:一背景項目即將上線,想通過一些工具來分析代碼的穩定性和效率,想起在上個團隊時使用過的擴展因為換了新電腦,所以需要重新編譯此擴展,現將安裝與實際排查過程完整記錄下來,方便自己回顧和幫助更多的讀者。作者湯青松微信日期
一、背景
項目即將上線,想通過一些工具來分析代碼的穩定性和效率,想起在上個團隊時使用過的xhprof擴展;因為換了新電腦,所以需要重新編譯此擴展,現將安裝與實際排查過程完整記錄下來,方便自己回顧和幫助更多的讀者。
二、操作步驟安裝擴展
配置擴展
測試分析
三、安裝xhprof擴展PHP并不自帶,需要筆者去多帶帶安裝它,安裝之后才能使用,筆者這里采用源碼安裝方式,安裝過程如下
3.1 下載源碼xhprof在PHP的PECL官方上面已經比較老了,筆者的PHP版本為PHP7.1因此,需要在GitHub上下載xhprof上比較新的源碼,參考命令如下
git clone https://github.com/longxinH/xhprof3.2 檢測環境
進入編譯的文件夾,參考命令
cd xhprof/extension/
現在筆者需要編譯一下源碼,在編譯之前可以使用phpze來探測PHP的環境,參考命令如下:
phpize
返回結果如下
Configuring for: PHP Api Version: 20160303 Zend Module Api No: 20160303 Zend Extension Api No: 3201603033.3 編譯安裝
生成 Makefile,為下一步的編譯做準備
./configure
返回結果如下
creating libtool appending configuration tag "CXX" to libtool configure: creating ./config.status config.status: creating config.h config.status: config.h is unchanged
開始編譯,并進行安裝
make && make install
返回結果如下
Build complete. Don"t forget to run "make test". Installing shared extensions: /usr/local/Cellar/php@7.1/7.1.19/pecl/20160303/
從返回信息中可以看到已經安裝完成,并顯示了擴展文件存放的位置
四、配置在編譯安裝源碼之后,筆者還需要對PHP的配置文件夾以及xhprof的進行一些簡單的配置,操作過程如下所示
4.1 找出配置文件位置要修改PHP的配置首先需要知道配置文件在什么位置,這里可以通過PHP的命令來查看配置文件存放位置,參考命令如下:
php --ini
執行命令后,返回結果如下
Configuration File (php.ini) Path: /usr/local/etc/php/7.1 Loaded Configuration File: /usr/local/etc/php/7.1/php.ini Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d Additional .ini files parsed: /usr/local/etc/php/7.1/conf.d/ext-opcache.ini
在返回結果當中,可以看到多個配置文件的路徑,筆者所需要的是第二個文件php.ini
查看擴展目錄存放位置,參考命令如下
cat /usr/local/etc/php/7.1/php.ini | grep extension_dir
返回結果如下
extension_dir = "/usr/local/lib/php/pecl/20160303" ; extension_dir = "ext" ; Be sure to appropriately set the extension_dir directive. ;sqlite3.extension_dir =4.2 修改配置
從返回的結果當中,可以看到擴展的存放目錄位置如下
/usr/local/lib/php/pecl/20160303
現在需要將剛才編譯好的xhprof擴展復制到該目錄當中,參考命令如下
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/
通過vim編輯器編輯配置文件,參考命令如下
vim /usr/local/etc/php/7.1/php.ini
在配置文件尾部增加xhprof的配置,以及自定義一個用來保存xhprof生成的源文件參考配置如下
[xhprof] extension=xhprof.so xhprof.output_dir=/data/www/xhprof/save_output_dir4.3 重啟生效
保存好之后,筆者重啟php-fpm讓其配置生效,重啟命令可以通過brew命令來查看,參考命令如下:
brew info php@7.1
在命令執行后,返回的信息中可以看到如下信息
To have launchd start php@7.1 now and restart at login: brew services start php@7.1 Or, if you don"t want/need a background service you can just run: php-fpm
因此筆者構造的重啟PHP-FPM命令如下:
brew services restart php@7.1
重啟完成后,返回結果如下
Stopping `php@7.1`... (might take a while) ==> Successfully stopped `php@7.1` (label: homebrew.mxcl.php@7.1) ==> Successfully started `php@7.1` (label: homebrew.mxcl.php@7.1)4.4 驗證安裝
現在驗證xhprof擴展是否已經安裝完成,參考命令如下
php -m | grep xhprof
命令執行后,安裝擴展成功的返回結果將會顯示xhprof,如下圖所示
五、測試經過上面的操作筆者已經成功的安裝與配置,現在需要用PHP代碼來進行驗證xhprof的分析效果
5.1 創建虛擬主機首先創建一個虛擬主機,讓用戶可以通過瀏覽器訪問所訪問,創建虛擬主機需要有一個根目錄,并編輯nginx配置文件,具體操作如下:
5.1.1 創建項目目錄創建項目根目錄,參考命令如下
mkdir -p /Users/song/mycode/work/test
創建成功之后,筆者需要將之前git拉下來的部分代碼復制到項目根目錄當中,參考命令如下
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
添加配置文件如下
server { listen 80; server_name test.localhost; root /Users/song/mycode/work/test; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
在/etc/hosts文件中增加入一行解析記錄,記錄內容如下:
127.0.0.1 test.localhost5.2 新建測試代碼
在git倉庫的examples文件夾下,已經有了一份demo代碼,不過這份代碼的注釋都是英文,而且排版方式也不易筆者自己理解,因此筆者重新編輯了此文件,參考步驟如下命令
使用vim新建一個PHP文件
vim /Users/song/mycode/work/test/test.php
在文件中加入以下代碼
save_run($xhprof_data, "xhprof_foo"); echo " http://test.localhost/xhprof/xhprof_html/index.php?run=$run_id&source=xhprof_foo ";
保存代碼之后,通過瀏覽器訪問對應的URL地址,URL地址如下所示
http://test.localhost/xhprof/test.php5.3 結果分析
運行后結果,如下圖
在頁面中可以看到一個URL地址,復制并打開此URL地址之后,便能看到此代碼的分析結果,如下圖所示
在頁面中有一個列表,展示了每一個方法所消耗的時間,如果覺得列表的方式表示不夠清晰,點擊頁面中的 View Full Callgraph 鏈接可以直接生成一個圖片,如下圖所示
在圖中很清晰的可以看到執行時間都消耗在test方法上,因此筆者可以針對這個方法進行針對性的優化。
作者:湯青松
微信:songboy8888
日期:2018-08-27
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29316.html
摘要:注這是我們應用性能分析系列的第一篇,閱讀第二篇可深入了解,第三篇則關注于性能調優實踐。性能分析的行為也會影響應用性能。主動被動性能分析主動分析器在開發過程中使用,由開發人員啟用。它對性能的影響最小,同時收集足夠的信息用于診斷性能問題。 注:這是我們 PHP 應用性能分析系列的第一篇,閱讀第二篇可深入了解 xhgui,第三篇則關注于性能調優實踐。 什么是性能分析? 性能分析是衡量應用程...
摘要:上一篇文章里,我們介紹了如何基于擴展來分析性能,并記錄到日志里,最后使用擴展自帶的在里展示出來。本次測試中,實際使用了擴展切換為擴展后里看不到數據,原因未知。雖然來自但已經很久不更新,官方源已經顯示此包已廢棄,不再維護。 上一篇文章里,我們介紹了如何基于xhprof擴展來分析PHP性能,并記錄到日志里,最后使用xhprof擴展自帶的UI在web里展示出來。本篇文章將講述2個知識點: ...
摘要:性能被動分析工具之加的安裝實踐前言最近一直想做個接口性能分析,但是手打實在能把人給累死。怎么辦呢想到之前有寫過一篇我所知道的相關調優匯總,里面有一個的調優方式。但是使用它酷炫的需要付費,擴展則不需要。 PHP性能被動分析工具之xhgui加tideways的安裝實踐 By:0x584A Date:2016-11-23 17:55:42 前言 最近一直想做個接口性能分析,但是手打log實在...
摘要:輸出的性能數據中添加數據。中間是要分析的代碼。是一個繪制圖形的工具,可以更為直觀的讓你查看性能的瓶頸。這樣所有使用該環境的都會生效。這樣僅該項目生效。 安裝xhprof擴展 wget http://pecl.php.net/get/xhprof-0.9.4.tgz tar zxf xhprof-0.9.4.tgz cd xhprof-0.9.4/extension/ sudo phpi...
閱讀 2967·2021-11-25 09:43
閱讀 3586·2021-11-24 11:13
閱讀 3354·2021-10-14 09:42
閱讀 2556·2021-09-23 11:53
閱讀 3605·2021-09-22 15:57
閱讀 3221·2021-09-02 09:54
閱讀 3499·2019-08-30 13:47
閱讀 1638·2019-08-29 16:55