之前看很多人有怎麼使用xhprof做效能分析的,於是就自己就在laradock下安裝tideways_xhprof進行嘗試。中間還是有部分問題的,在此特意記錄一下。
一. 準備
一開始查資料很多人說laradock中沒有xhprof,但自己看了下laradock的.env檔案,發現在php-fpm的配置項中存在。所以就直接基於laradock安裝,而不重新以擴充套件的方式安裝了。
xhprof原專案已經很久沒更新並且不支援PHP7,所以這裡檢視了laradock下php-fpm下的dockerfile檔案,這裡使用的是tideways的擴充套件。因為tideways的ui不是免費的,所以這裡使用Xhgui進行圖形化操作。Xhgui需要使用MongoDB,所以我們總共需要安裝的有 tideways、MongoDB、xhgui。
二,正式安裝
1,安裝XHPROF與Mongo擴充套件
在laradock目錄下,開啟.env檔案,進行如下配置。
[WORKSPACE]
WORKSPACE_INSTALL_MONGO=true
[PHP_FPM]
PHP_FPM_INSTALL_XHPROF=true
PHP_FPM_INSTALL_MONGO=true
然後重新編譯php-fpm和workspace
docker-compose build php-fpm workspace
重新編譯因為網路的問題有時會出錯,這個請自行想辦法。或者,當你在安裝某項擴充套件的時候遇到了404錯誤,嘗試在對應的dockerfile檔案中相應位置做如下改動。
例如,我在重新編譯的時候遇到了 IMAGEMAGICK 404 的問題(報錯資訊會告訴你在編譯的時候是誰遇到了什麼問題)。那麼,我在php-fpm下的dockerfile檔案中做了如下修改,問題得到解決(每個人遇到的問題不同,請具體問題具體分析)。
RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then
apt-get install -y libmagickwand-dev imagemagick &&
pecl install imagick &&
docker-php-ext-enable imagick
;fi
(上面是原來的檔案,下面才是修改後的。也就是新增了apt-get update)
RUN if [ ${INSTALL_IMAGEMAGICK} = true ]; then
apt-get update && apt-get install -y libmagickwand-dev imagemagick &&
pecl install imagick &&
docker-php-ext-enable imagick
;fi
2,安裝MongoDB
此處參照laradock文件(使用Mongo),這裡就不贅述了。
3,安裝Xhgui
我這裡安裝的是xhgui的漢化版,在你的專案目錄下,安裝。
$ git clone https://github.com/laynefyc/xhgui-branch.git
$ cd xhgui-branch
$ php install.php
進入到mongo容器,執行以下命令
$ mongo
> use xhprof
> db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } )
> db.results.ensureIndex( { 'profile.main().wt' : -1 } )
> db.results.ensureIndex( { 'profile.main().mu' : -1 } )
> db.results.ensureIndex( { 'profile.main().cpu' : -1 } )
> db.results.ensureIndex( { 'meta.url' : 1 } )
4,修改 xhgui-branch 的配置檔案
<?php
return array(
...
'extension' => 'tideways_xhprof',
...
'save.handler' => 'mongodb',
'db.host' => 'mongodb://mongo:27017',
'db.db' => 'xhprof',
...
);
5,配置 Xhgui 虛擬主機
server {
listen 80;
server_name xhgui.test;
root /var/www/xhgui-branch/webroot;
location / {
try_files $uri $uri/ /index.php?$query_string;
index index.php index.html index.htm;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
}
charset utf-8;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location ~ /\.ht {
deny all;
}
}
6,增加監控
在需要分析的站點的nginx配置檔案中,新增如下項即可。
fastcgi_param PHP_VALUE "auto_prepend_file=/path/xhgui-branch/external/header.php";
參考配置
server {
listen 80;
server_name laravel.test;
root /var/www/laravel/public;
# access_log /usr/local/var/log/nginx/access.log;
error_log /usr/local/var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php?$query_string;
index index.php index.html index.htm;
}
# 新增 PHP_VALUE,告訴 PHP 程式在執行前要呼叫的服務
fastcgi_param PHP_VALUE "auto_prepend_file=/path/wwwroot/xhgui-branch/external/header.php";
}
至此,安裝部分已經結束了。可以去訪問專案,嘗試去使用了。
參考文獻
《Tideways、xhprof 和 xhgui 打造 PHP 非侵入式監控平臺》
本作品採用《CC 協議》,轉載必須註明作者和本文連結