Laradock 下使用 Tideways_xhprof+Xhgui 進行效能分析 —— 安裝篇

lishen發表於2020-05-12

之前看很多人有怎麼使用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。

Laradock下使用Tideways_xhprof+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 協議》,轉載必須註明作者和本文連結

相關文章