'PHP網站訪問慢,我們應該如何處理?'

"

如果你們公司的業務是用PHP語言開發的,那麼使用的環境十有八九就是LNMP,在日常的運維工作中,佔到9成以上的故障是遇到性能問題。

你可能會想,我們的業務運行的好好的,為啥平白無故就出現性能問題?原因有太多可能,比如代碼改動、異常訪問、網絡波動、服務器硬件故障等等。

引起性能問題的原因有這麼多,那如何定位呢?本章就來給大家介紹一個性能追蹤的方法,這個方法在我運維職業生涯裡屢試不爽,幫了我不少大忙。

"

如果你們公司的業務是用PHP語言開發的,那麼使用的環境十有八九就是LNMP,在日常的運維工作中,佔到9成以上的故障是遇到性能問題。

你可能會想,我們的業務運行的好好的,為啥平白無故就出現性能問題?原因有太多可能,比如代碼改動、異常訪問、網絡波動、服務器硬件故障等等。

引起性能問題的原因有這麼多,那如何定位呢?本章就來給大家介紹一個性能追蹤的方法,這個方法在我運維職業生涯裡屢試不爽,幫了我不少大忙。

PHP網站訪問慢,我們應該如何處理?

< 1 > PHP-FPM的slow log

如果你所運維的網站或者應用為PHP的,那我相信你一定對LAMP或者LNMP不陌生。我主張使用LNMP,原因無他,就一點 -- 我們可以通過slow log很方便地追蹤到問題點。先來看配置方法吧。

1)編輯配置文件(假設php安裝路徑為/usr/local/php, 配置文件路徑/usr/local/php/etc/php-fpm.conf)

# vim /usr/local/php/etc/php-fpm.conf #更改或增加兩行內容
slowlog = /data/logs/php-slow.log
request_slowlog_timeout = 2

說明:slowlog定義日誌路徑和名字,request_slowlog_timeout定義超時時間,單位秒,即一個php腳本執行時間超過了該時間,則會記錄日誌。

2)重啟php-fpm服務

具體重啟命令,根據你自己的環境來決定。配置文件修改後,不重啟或者不重載服務是不生效的。

3)測試

在測試站點裡新建一個test.php文件,寫入如下內容:

<?php
echo "1";
sleep (5);
echo "2";

然後在瀏覽器裡或者使用curl命令去訪問

# curl http://ip/test.php

4)結果分析

訪問test.php時,我們能感覺到它短暫卡死,大概5秒後出現結果。此時到/data/logs/php-slow.log裡查看,有如下內容:

[pool www] pid 6368
script_filename = /data/wwwroot/aminglinux.cc/test.php
[0x00007ff8c821f090] sleep() /data/wwwroot/aminglinux.cc/test.php:3

這個slow log,不僅可以記錄哪一個文件慢,而且也可以記錄具體哪一行的什麼函數。有了它,一旦網站訪問卡頓,我們就非常方便地找到問題點了。

< 2 > 線上生產環境演示案例

問題描述:網站訪問變卡頓了,不是不能訪問,而是變慢了。

解決過程:

1)登錄服務器查看負載,結果不到1,並不高

2)vmstat 1查看發現r列時不時出現不高於5的數字,說明有些進程比較忙

3)用top命令查看,php-fpm進程排在前面

4)查看slow log,結果如下:
[29-1月-2019 16:54:59] [pool www] pid 20287
script_filename = /data/wwwroot/www.example.com/redirect.php
[0x00000000031d83c0] mysql_query() /data/wwwroot/www.example.com/include/db_mysql.class.php:84
[0x00000000031d6bb0] query() /data/wwwroot/www.example.com/redirect.php:105
[29-1月-2019 16:54:59] [pool www] pid 23066
script_filename = /data/wwwroot/www.example.com/redirect.php
[0x000000000319b5a0] mysql_query() /data/wwwroot/www.example.com/include/db_mysql.class.php:84
[0x0000000003199d90] query() /data/wwwroot/www.example.com/redirect.php:122

通過slow log發現是redirect.php裡面有查詢數據庫的操作慢導致網站訪問卡頓。所以,還需要登錄數據庫服務器近一步分析為什麼MySQL查詢慢,這個就涉及到了MySQL的慢查詢日誌,具體詳細的操作我不再闡述。

< 3 > 使用Xdebug+Webgrind

如果網站跑在了LAMP環境中,就無法使用php-fpm的slow log了,那如何分析瓶頸點?沒關係你還可以使用這個Xdebug+Webgrind,其中Xdebug是一個開放源代碼的PHP程序調試器(即一個Debug工具),可以用來跟蹤,調試和分析PHP程序的運行狀況。Webgrind是一個網頁版的性能分析工具,它的主要作用就是分析Xdebug生成的cachegrind文件,以一種界面友好詳盡的方式來展示性能數據。

Xdebug安裝

Xdebug官方網站:http://xdebug.org/.

1)下載源碼

如果你用的PHP版本較高,建議下載最新版本

# wget https://xdebug.org/files/xdebug-2.7.0beta1.tgz
2)編譯安裝

# tar zxf xdebug-2.7.0beta1.tgz

# cd xdebug-2.7.0beta1

# /usr/local/php-fpm/bin/phpize

# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config

# make && make install

3)配置

# vi /usr/local/php-fpm/etc/php.ini #在最後面增加
[xdebug]
zend_extension=xdebug.so
xdebug.trace_output_dir=/tmp/xdebug
xdebug.profiler_output_dir = /tmp/xdebug
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
4)檢查
# /usr/local/php-fpm/bin/php -m |grep -C 1 Xdebug
[Zend Modules]
Xdebug
5)創建Xdebug目錄

# mkdir /tmp/xdebug

# chmod 777 !$

6)重啟php-fpm或者apache服務

因為修改了php.ini配置文件,需要重啟對應的服務,才可以生效,我這裡用的是php-fpm

# /etc/init.d/php-fpm restart
"

如果你們公司的業務是用PHP語言開發的,那麼使用的環境十有八九就是LNMP,在日常的運維工作中,佔到9成以上的故障是遇到性能問題。

你可能會想,我們的業務運行的好好的,為啥平白無故就出現性能問題?原因有太多可能,比如代碼改動、異常訪問、網絡波動、服務器硬件故障等等。

引起性能問題的原因有這麼多,那如何定位呢?本章就來給大家介紹一個性能追蹤的方法,這個方法在我運維職業生涯裡屢試不爽,幫了我不少大忙。

PHP網站訪問慢,我們應該如何處理?

< 1 > PHP-FPM的slow log

如果你所運維的網站或者應用為PHP的,那我相信你一定對LAMP或者LNMP不陌生。我主張使用LNMP,原因無他,就一點 -- 我們可以通過slow log很方便地追蹤到問題點。先來看配置方法吧。

1)編輯配置文件(假設php安裝路徑為/usr/local/php, 配置文件路徑/usr/local/php/etc/php-fpm.conf)

# vim /usr/local/php/etc/php-fpm.conf #更改或增加兩行內容
slowlog = /data/logs/php-slow.log
request_slowlog_timeout = 2

說明:slowlog定義日誌路徑和名字,request_slowlog_timeout定義超時時間,單位秒,即一個php腳本執行時間超過了該時間,則會記錄日誌。

2)重啟php-fpm服務

具體重啟命令,根據你自己的環境來決定。配置文件修改後,不重啟或者不重載服務是不生效的。

3)測試

在測試站點裡新建一個test.php文件,寫入如下內容:

<?php
echo "1";
sleep (5);
echo "2";

然後在瀏覽器裡或者使用curl命令去訪問

# curl http://ip/test.php

4)結果分析

訪問test.php時,我們能感覺到它短暫卡死,大概5秒後出現結果。此時到/data/logs/php-slow.log裡查看,有如下內容:

[pool www] pid 6368
script_filename = /data/wwwroot/aminglinux.cc/test.php
[0x00007ff8c821f090] sleep() /data/wwwroot/aminglinux.cc/test.php:3

這個slow log,不僅可以記錄哪一個文件慢,而且也可以記錄具體哪一行的什麼函數。有了它,一旦網站訪問卡頓,我們就非常方便地找到問題點了。

< 2 > 線上生產環境演示案例

問題描述:網站訪問變卡頓了,不是不能訪問,而是變慢了。

解決過程:

1)登錄服務器查看負載,結果不到1,並不高

2)vmstat 1查看發現r列時不時出現不高於5的數字,說明有些進程比較忙

3)用top命令查看,php-fpm進程排在前面

4)查看slow log,結果如下:
[29-1月-2019 16:54:59] [pool www] pid 20287
script_filename = /data/wwwroot/www.example.com/redirect.php
[0x00000000031d83c0] mysql_query() /data/wwwroot/www.example.com/include/db_mysql.class.php:84
[0x00000000031d6bb0] query() /data/wwwroot/www.example.com/redirect.php:105
[29-1月-2019 16:54:59] [pool www] pid 23066
script_filename = /data/wwwroot/www.example.com/redirect.php
[0x000000000319b5a0] mysql_query() /data/wwwroot/www.example.com/include/db_mysql.class.php:84
[0x0000000003199d90] query() /data/wwwroot/www.example.com/redirect.php:122

通過slow log發現是redirect.php裡面有查詢數據庫的操作慢導致網站訪問卡頓。所以,還需要登錄數據庫服務器近一步分析為什麼MySQL查詢慢,這個就涉及到了MySQL的慢查詢日誌,具體詳細的操作我不再闡述。

< 3 > 使用Xdebug+Webgrind

如果網站跑在了LAMP環境中,就無法使用php-fpm的slow log了,那如何分析瓶頸點?沒關係你還可以使用這個Xdebug+Webgrind,其中Xdebug是一個開放源代碼的PHP程序調試器(即一個Debug工具),可以用來跟蹤,調試和分析PHP程序的運行狀況。Webgrind是一個網頁版的性能分析工具,它的主要作用就是分析Xdebug生成的cachegrind文件,以一種界面友好詳盡的方式來展示性能數據。

Xdebug安裝

Xdebug官方網站:http://xdebug.org/.

1)下載源碼

如果你用的PHP版本較高,建議下載最新版本

# wget https://xdebug.org/files/xdebug-2.7.0beta1.tgz
2)編譯安裝

# tar zxf xdebug-2.7.0beta1.tgz

# cd xdebug-2.7.0beta1

# /usr/local/php-fpm/bin/phpize

# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config

# make && make install

3)配置

# vi /usr/local/php-fpm/etc/php.ini #在最後面增加
[xdebug]
zend_extension=xdebug.so
xdebug.trace_output_dir=/tmp/xdebug
xdebug.profiler_output_dir = /tmp/xdebug
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
4)檢查
# /usr/local/php-fpm/bin/php -m |grep -C 1 Xdebug
[Zend Modules]
Xdebug
5)創建Xdebug目錄

# mkdir /tmp/xdebug

# chmod 777 !$

6)重啟php-fpm或者apache服務

因為修改了php.ini配置文件,需要重啟對應的服務,才可以生效,我這裡用的是php-fpm

# /etc/init.d/php-fpm restart
PHP網站訪問慢,我們應該如何處理?

Webgrind安裝

1)下載

Webgrind官方github地址https://github.com/jokkedk/webgrind

# wget https://codeload.github.com/jokkedk/webgrind/zip/v1.5.0
# mv v1.5.0 webgrind-1.5.0.zip
# unzip webgrind-1.5.0.zip

2)為Webgrind配置站點

Webgrind其實是一個PHP網站程序,需要為其設置一個虛擬主機,我用的是LNMP環境,所以需要配置Nginx, 當然你也可以直接把webgrind程序目錄丟到一個站點內,通過二級目錄去訪問。下面是我的Nginx虛擬主機配置文件內容:

server {

listen 80;

server_name webgrind.aminglinux.cc;

root /data/wwwroot/webgrind;

index index.html index.htm index.php;

location ~ \\.php$ {

fastcgi_pass 127.0.0.1:9001;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/webgrind$fastcgi_script_name;

include fastcgi_params;

}

3)配置webgrind

假如新配置的虛擬主機目錄為/data/wwwroot/webgrind

# mv webgrind-1.5.0/* /data/wwwroot/webgrind/

# vim config.php #修改$storeageDir和$profileDir

static $storageDir = '/tmp/xdebug';

static $profilerDir = '/tmp/xdebug';

4)性能追蹤

首先訪問要追蹤性能的PHP網站,然後查看/tmp/xdebug目錄下是否生成文件

# ls /tmp/xdebug/

cachegrind.out.11442 cachegrind.out.11443 cachegrind.out.11443.091dcb

我的已經生成3個文件,然後在瀏覽器訪問即可,不過需要你先選擇腳本文件(右上角),點擊update之後才會出現分析內容。

"

如果你們公司的業務是用PHP語言開發的,那麼使用的環境十有八九就是LNMP,在日常的運維工作中,佔到9成以上的故障是遇到性能問題。

你可能會想,我們的業務運行的好好的,為啥平白無故就出現性能問題?原因有太多可能,比如代碼改動、異常訪問、網絡波動、服務器硬件故障等等。

引起性能問題的原因有這麼多,那如何定位呢?本章就來給大家介紹一個性能追蹤的方法,這個方法在我運維職業生涯裡屢試不爽,幫了我不少大忙。

PHP網站訪問慢,我們應該如何處理?

< 1 > PHP-FPM的slow log

如果你所運維的網站或者應用為PHP的,那我相信你一定對LAMP或者LNMP不陌生。我主張使用LNMP,原因無他,就一點 -- 我們可以通過slow log很方便地追蹤到問題點。先來看配置方法吧。

1)編輯配置文件(假設php安裝路徑為/usr/local/php, 配置文件路徑/usr/local/php/etc/php-fpm.conf)

# vim /usr/local/php/etc/php-fpm.conf #更改或增加兩行內容
slowlog = /data/logs/php-slow.log
request_slowlog_timeout = 2

說明:slowlog定義日誌路徑和名字,request_slowlog_timeout定義超時時間,單位秒,即一個php腳本執行時間超過了該時間,則會記錄日誌。

2)重啟php-fpm服務

具體重啟命令,根據你自己的環境來決定。配置文件修改後,不重啟或者不重載服務是不生效的。

3)測試

在測試站點裡新建一個test.php文件,寫入如下內容:

<?php
echo "1";
sleep (5);
echo "2";

然後在瀏覽器裡或者使用curl命令去訪問

# curl http://ip/test.php

4)結果分析

訪問test.php時,我們能感覺到它短暫卡死,大概5秒後出現結果。此時到/data/logs/php-slow.log裡查看,有如下內容:

[pool www] pid 6368
script_filename = /data/wwwroot/aminglinux.cc/test.php
[0x00007ff8c821f090] sleep() /data/wwwroot/aminglinux.cc/test.php:3

這個slow log,不僅可以記錄哪一個文件慢,而且也可以記錄具體哪一行的什麼函數。有了它,一旦網站訪問卡頓,我們就非常方便地找到問題點了。

< 2 > 線上生產環境演示案例

問題描述:網站訪問變卡頓了,不是不能訪問,而是變慢了。

解決過程:

1)登錄服務器查看負載,結果不到1,並不高

2)vmstat 1查看發現r列時不時出現不高於5的數字,說明有些進程比較忙

3)用top命令查看,php-fpm進程排在前面

4)查看slow log,結果如下:
[29-1月-2019 16:54:59] [pool www] pid 20287
script_filename = /data/wwwroot/www.example.com/redirect.php
[0x00000000031d83c0] mysql_query() /data/wwwroot/www.example.com/include/db_mysql.class.php:84
[0x00000000031d6bb0] query() /data/wwwroot/www.example.com/redirect.php:105
[29-1月-2019 16:54:59] [pool www] pid 23066
script_filename = /data/wwwroot/www.example.com/redirect.php
[0x000000000319b5a0] mysql_query() /data/wwwroot/www.example.com/include/db_mysql.class.php:84
[0x0000000003199d90] query() /data/wwwroot/www.example.com/redirect.php:122

通過slow log發現是redirect.php裡面有查詢數據庫的操作慢導致網站訪問卡頓。所以,還需要登錄數據庫服務器近一步分析為什麼MySQL查詢慢,這個就涉及到了MySQL的慢查詢日誌,具體詳細的操作我不再闡述。

< 3 > 使用Xdebug+Webgrind

如果網站跑在了LAMP環境中,就無法使用php-fpm的slow log了,那如何分析瓶頸點?沒關係你還可以使用這個Xdebug+Webgrind,其中Xdebug是一個開放源代碼的PHP程序調試器(即一個Debug工具),可以用來跟蹤,調試和分析PHP程序的運行狀況。Webgrind是一個網頁版的性能分析工具,它的主要作用就是分析Xdebug生成的cachegrind文件,以一種界面友好詳盡的方式來展示性能數據。

Xdebug安裝

Xdebug官方網站:http://xdebug.org/.

1)下載源碼

如果你用的PHP版本較高,建議下載最新版本

# wget https://xdebug.org/files/xdebug-2.7.0beta1.tgz
2)編譯安裝

# tar zxf xdebug-2.7.0beta1.tgz

# cd xdebug-2.7.0beta1

# /usr/local/php-fpm/bin/phpize

# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config

# make && make install

3)配置

# vi /usr/local/php-fpm/etc/php.ini #在最後面增加
[xdebug]
zend_extension=xdebug.so
xdebug.trace_output_dir=/tmp/xdebug
xdebug.profiler_output_dir = /tmp/xdebug
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
4)檢查
# /usr/local/php-fpm/bin/php -m |grep -C 1 Xdebug
[Zend Modules]
Xdebug
5)創建Xdebug目錄

# mkdir /tmp/xdebug

# chmod 777 !$

6)重啟php-fpm或者apache服務

因為修改了php.ini配置文件,需要重啟對應的服務,才可以生效,我這裡用的是php-fpm

# /etc/init.d/php-fpm restart
PHP網站訪問慢,我們應該如何處理?

Webgrind安裝

1)下載

Webgrind官方github地址https://github.com/jokkedk/webgrind

# wget https://codeload.github.com/jokkedk/webgrind/zip/v1.5.0
# mv v1.5.0 webgrind-1.5.0.zip
# unzip webgrind-1.5.0.zip

2)為Webgrind配置站點

Webgrind其實是一個PHP網站程序,需要為其設置一個虛擬主機,我用的是LNMP環境,所以需要配置Nginx, 當然你也可以直接把webgrind程序目錄丟到一個站點內,通過二級目錄去訪問。下面是我的Nginx虛擬主機配置文件內容:

server {

listen 80;

server_name webgrind.aminglinux.cc;

root /data/wwwroot/webgrind;

index index.html index.htm index.php;

location ~ \\.php$ {

fastcgi_pass 127.0.0.1:9001;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/webgrind$fastcgi_script_name;

include fastcgi_params;

}

3)配置webgrind

假如新配置的虛擬主機目錄為/data/wwwroot/webgrind

# mv webgrind-1.5.0/* /data/wwwroot/webgrind/

# vim config.php #修改$storeageDir和$profileDir

static $storageDir = '/tmp/xdebug';

static $profilerDir = '/tmp/xdebug';

4)性能追蹤

首先訪問要追蹤性能的PHP網站,然後查看/tmp/xdebug目錄下是否生成文件

# ls /tmp/xdebug/

cachegrind.out.11442 cachegrind.out.11443 cachegrind.out.11443.091dcb

我的已經生成3個文件,然後在瀏覽器訪問即可,不過需要你先選擇腳本文件(右上角),點擊update之後才會出現分析內容。

PHP網站訪問慢,我們應該如何處理?

5)圖形顯示

我們還可以把PHP代碼中的各個函數調用關係以圖形的形式展現出來,這樣更加直觀。前提是需要python和dot兩個工具的支持,python默認機器上自帶,但是dot需要安裝

# yum install -y graphviz

點擊右上角的“show call graph”按鈕,就會出現漂亮的調用圖

"

如果你們公司的業務是用PHP語言開發的,那麼使用的環境十有八九就是LNMP,在日常的運維工作中,佔到9成以上的故障是遇到性能問題。

你可能會想,我們的業務運行的好好的,為啥平白無故就出現性能問題?原因有太多可能,比如代碼改動、異常訪問、網絡波動、服務器硬件故障等等。

引起性能問題的原因有這麼多,那如何定位呢?本章就來給大家介紹一個性能追蹤的方法,這個方法在我運維職業生涯裡屢試不爽,幫了我不少大忙。

PHP網站訪問慢,我們應該如何處理?

< 1 > PHP-FPM的slow log

如果你所運維的網站或者應用為PHP的,那我相信你一定對LAMP或者LNMP不陌生。我主張使用LNMP,原因無他,就一點 -- 我們可以通過slow log很方便地追蹤到問題點。先來看配置方法吧。

1)編輯配置文件(假設php安裝路徑為/usr/local/php, 配置文件路徑/usr/local/php/etc/php-fpm.conf)

# vim /usr/local/php/etc/php-fpm.conf #更改或增加兩行內容
slowlog = /data/logs/php-slow.log
request_slowlog_timeout = 2

說明:slowlog定義日誌路徑和名字,request_slowlog_timeout定義超時時間,單位秒,即一個php腳本執行時間超過了該時間,則會記錄日誌。

2)重啟php-fpm服務

具體重啟命令,根據你自己的環境來決定。配置文件修改後,不重啟或者不重載服務是不生效的。

3)測試

在測試站點裡新建一個test.php文件,寫入如下內容:

<?php
echo "1";
sleep (5);
echo "2";

然後在瀏覽器裡或者使用curl命令去訪問

# curl http://ip/test.php

4)結果分析

訪問test.php時,我們能感覺到它短暫卡死,大概5秒後出現結果。此時到/data/logs/php-slow.log裡查看,有如下內容:

[pool www] pid 6368
script_filename = /data/wwwroot/aminglinux.cc/test.php
[0x00007ff8c821f090] sleep() /data/wwwroot/aminglinux.cc/test.php:3

這個slow log,不僅可以記錄哪一個文件慢,而且也可以記錄具體哪一行的什麼函數。有了它,一旦網站訪問卡頓,我們就非常方便地找到問題點了。

< 2 > 線上生產環境演示案例

問題描述:網站訪問變卡頓了,不是不能訪問,而是變慢了。

解決過程:

1)登錄服務器查看負載,結果不到1,並不高

2)vmstat 1查看發現r列時不時出現不高於5的數字,說明有些進程比較忙

3)用top命令查看,php-fpm進程排在前面

4)查看slow log,結果如下:
[29-1月-2019 16:54:59] [pool www] pid 20287
script_filename = /data/wwwroot/www.example.com/redirect.php
[0x00000000031d83c0] mysql_query() /data/wwwroot/www.example.com/include/db_mysql.class.php:84
[0x00000000031d6bb0] query() /data/wwwroot/www.example.com/redirect.php:105
[29-1月-2019 16:54:59] [pool www] pid 23066
script_filename = /data/wwwroot/www.example.com/redirect.php
[0x000000000319b5a0] mysql_query() /data/wwwroot/www.example.com/include/db_mysql.class.php:84
[0x0000000003199d90] query() /data/wwwroot/www.example.com/redirect.php:122

通過slow log發現是redirect.php裡面有查詢數據庫的操作慢導致網站訪問卡頓。所以,還需要登錄數據庫服務器近一步分析為什麼MySQL查詢慢,這個就涉及到了MySQL的慢查詢日誌,具體詳細的操作我不再闡述。

< 3 > 使用Xdebug+Webgrind

如果網站跑在了LAMP環境中,就無法使用php-fpm的slow log了,那如何分析瓶頸點?沒關係你還可以使用這個Xdebug+Webgrind,其中Xdebug是一個開放源代碼的PHP程序調試器(即一個Debug工具),可以用來跟蹤,調試和分析PHP程序的運行狀況。Webgrind是一個網頁版的性能分析工具,它的主要作用就是分析Xdebug生成的cachegrind文件,以一種界面友好詳盡的方式來展示性能數據。

Xdebug安裝

Xdebug官方網站:http://xdebug.org/.

1)下載源碼

如果你用的PHP版本較高,建議下載最新版本

# wget https://xdebug.org/files/xdebug-2.7.0beta1.tgz
2)編譯安裝

# tar zxf xdebug-2.7.0beta1.tgz

# cd xdebug-2.7.0beta1

# /usr/local/php-fpm/bin/phpize

# ./configure --with-php-config=/usr/local/php-fpm/bin/php-config

# make && make install

3)配置

# vi /usr/local/php-fpm/etc/php.ini #在最後面增加
[xdebug]
zend_extension=xdebug.so
xdebug.trace_output_dir=/tmp/xdebug
xdebug.profiler_output_dir = /tmp/xdebug
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 1
4)檢查
# /usr/local/php-fpm/bin/php -m |grep -C 1 Xdebug
[Zend Modules]
Xdebug
5)創建Xdebug目錄

# mkdir /tmp/xdebug

# chmod 777 !$

6)重啟php-fpm或者apache服務

因為修改了php.ini配置文件,需要重啟對應的服務,才可以生效,我這裡用的是php-fpm

# /etc/init.d/php-fpm restart
PHP網站訪問慢,我們應該如何處理?

Webgrind安裝

1)下載

Webgrind官方github地址https://github.com/jokkedk/webgrind

# wget https://codeload.github.com/jokkedk/webgrind/zip/v1.5.0
# mv v1.5.0 webgrind-1.5.0.zip
# unzip webgrind-1.5.0.zip

2)為Webgrind配置站點

Webgrind其實是一個PHP網站程序,需要為其設置一個虛擬主機,我用的是LNMP環境,所以需要配置Nginx, 當然你也可以直接把webgrind程序目錄丟到一個站點內,通過二級目錄去訪問。下面是我的Nginx虛擬主機配置文件內容:

server {

listen 80;

server_name webgrind.aminglinux.cc;

root /data/wwwroot/webgrind;

index index.html index.htm index.php;

location ~ \\.php$ {

fastcgi_pass 127.0.0.1:9001;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /data/wwwroot/webgrind$fastcgi_script_name;

include fastcgi_params;

}

3)配置webgrind

假如新配置的虛擬主機目錄為/data/wwwroot/webgrind

# mv webgrind-1.5.0/* /data/wwwroot/webgrind/

# vim config.php #修改$storeageDir和$profileDir

static $storageDir = '/tmp/xdebug';

static $profilerDir = '/tmp/xdebug';

4)性能追蹤

首先訪問要追蹤性能的PHP網站,然後查看/tmp/xdebug目錄下是否生成文件

# ls /tmp/xdebug/

cachegrind.out.11442 cachegrind.out.11443 cachegrind.out.11443.091dcb

我的已經生成3個文件,然後在瀏覽器訪問即可,不過需要你先選擇腳本文件(右上角),點擊update之後才會出現分析內容。

PHP網站訪問慢,我們應該如何處理?

5)圖形顯示

我們還可以把PHP代碼中的各個函數調用關係以圖形的形式展現出來,這樣更加直觀。前提是需要python和dot兩個工具的支持,python默認機器上自帶,但是dot需要安裝

# yum install -y graphviz

點擊右上角的“show call graph”按鈕,就會出現漂亮的調用圖

PHP網站訪問慢,我們應該如何處理?

關注微信公眾號:安徽思恆信息科技有限公司,瞭解更多技術內容……

"

相關推薦

推薦中...