如何定位php程序訪問慢

公司的業(yè)務(wù)是用PHP語言開發(fā)的,那么使用的環(huán)境十有八九就是LNMP。在日常的運(yùn)維工作中,占到9成以上的故障是遇到性能問題。
你可能會(huì)想,我們的業(yè)務(wù)運(yùn)行的好好的,為啥平白無故就出現(xiàn)性能問題?
原因有太多可能,比如代碼改動(dòng)、異常訪問、網(wǎng)絡(luò)波動(dòng)、服務(wù)器硬件故障等等。
引起性能問題的原因有這么多,那如何定位呢?
給大家介紹一個(gè)性能追蹤的方法,這個(gè)方法在我運(yùn)維職業(yè)生涯里屢試不爽,幫了我不少大忙。
— slow log追蹤 —
我們可以通過slow log很方便地追蹤到問題點(diǎn)。先來看配置方法吧。

創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、若羌網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)、成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為若羌等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

?1)編輯配置文件
假設(shè)php安裝路徑為/usr/local/php,配置文件路徑/usr/local/php/etc/php-fpm.conf)
#?vim?/usr/local/php/etc/php-fpm.conf?#更改或增加兩行內(nèi)容slowlog?=?/data/logs/php-slow.logrequest_slowlog_timeout?=?2
說明:slowlog定義日志路徑和名字,request_slowlog_timeout定義超時(shí)時(shí)間,單位秒,即一個(gè)php腳本執(zhí)行時(shí)間超過了該時(shí)間,則會(huì)記錄日志。

2)重啟php-fpm服務(wù)
具體重啟命令,根據(jù)你自己的環(huán)境來決定。配置文件修改后,不重啟或者不重載服務(wù)是不生效的。

3)測(cè)試
在測(cè)試站點(diǎn)里新建一個(gè)test.php文件,寫入如下內(nèi)容:
<?php????echo?"1";????sleep?(5);????echo?"2";
然后在瀏覽器里或者使用curl命令去訪問
#?curl?http://ip/test.php

4)結(jié)果分析
訪問test.php時(shí),我們能感覺到它短暫卡死,大概5秒后出現(xiàn)結(jié)果。此時(shí)到/data/logs/php-slow.log里查看,有如下內(nèi)容:
[pool?www]?pid?6368script_filename?=?/data/wwwroot/aminglinux.cc/test.php[0x00007ff8c821f090]?sleep()?/data/wwwroot/aminglinux.cc/test.php:3
這個(gè)slow log,不僅可以記錄哪一個(gè)文件慢,而且也可以記錄具體哪一行的什么函數(shù)。
有了它,一旦網(wǎng)站訪問卡頓,我們就非常方便地找到問題點(diǎn)了。

— 線上生產(chǎn)環(huán)境演示案例 —

問題描述:
網(wǎng)站訪問變卡頓了,不是不能訪問,而是變慢了。
解決過程:
1)登錄服務(wù)器查看負(fù)載,結(jié)果不到1,并不高
2)vmstat 1查看發(fā)現(xiàn)r列時(shí)不時(shí)出現(xiàn)不高于5的數(shù)字,說明有些進(jìn)程比較忙
3)用top命令查看,php-fpm進(jìn)程排在前面
4)查看slow log,結(jié)果如下:? ?
? ?[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發(fā)現(xiàn)是redirect.php里面有查詢數(shù)據(jù)庫的操作慢導(dǎo)致網(wǎng)站訪問卡頓。
所以,還需要登錄數(shù)據(jù)庫服務(wù)器近一步分析為什么MySQL查詢慢,這個(gè)就涉及到了MySQL的慢查詢?nèi)罩?,具體詳細(xì)的操作我不再闡述。
— 使用Xdebug+Webgrind —
如果網(wǎng)站跑在了LAMP環(huán)境中,就無法使用php-fpm的slow log了,那如何分析瓶頸點(diǎn)?
沒關(guān)系你還可以使用這個(gè)Xdebug+Webgrind,其中Xdebug是一個(gè)開放源代碼的PHP程序調(diào)試器(即一個(gè)Debug工具),可以用來跟蹤,調(diào)試和分析PHP程序的運(yùn)行狀況。
Webgrind是一個(gè)網(wǎng)頁版的性能分析工具,它的主要作用就是分析Xdebug生成的cachegrind文件,以一種界面友好詳盡的方式來展示性能數(shù)據(jù)。
Xdebug安裝:
????
Xdebug官方網(wǎng)站: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.soxdebug.trace_output_dir=/tmp/xdebugxdebug.profiler_output_dir?=?/tmp/xdebugxdebug.profiler_enable?=?1xdebug.profiler_enable_trigger?=?1
4)檢查
#?/usr/local/php-fpm/bin/php?-m?|grep?-C?1?Xdebug[Zend?Modules]Xdebug
5)創(chuàng)建Xdebug目錄
#?mkdir?/tmp/xdebug#?chmod?777?!$
6)重啟php-fpm或者apache服務(wù)
因?yàn)樾薷牧藀hp.ini配置文件,需要重啟對(duì)應(yīng)的服務(wù),才可以生效,我這里用的是php-fpm
#?/etc/init.d/php-fpm?restart
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配置站點(diǎn)
Webgrind其實(shí)是一個(gè)PHP網(wǎng)站程序,需要為其設(shè)置一個(gè)虛擬主機(jī),我用的是LNMP環(huán)境,所以需要配置Nginx, 當(dāng)然你也可以直接把webgrind程序目錄丟到一個(gè)站點(diǎn)內(nèi),通過二級(jí)目錄去訪問。下面是我的Nginx虛擬主機(jī)配置文件內(nèi)容:
????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
假如新配置的虛擬主機(jī)目錄為/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網(wǎng)站,然后查看/tmp/xdebug目錄下是否生成文件
??#?ls?/tmp/xdebug/
??cachegrind.out.11442??cachegrind.out.11443??cachegrind.out.11443.091dcb
我的已經(jīng)生成3個(gè)文件,然后在瀏覽器訪問即可,不過需要你先選擇腳本文件(右上角),點(diǎn)擊update之后才會(huì)出現(xiàn)分析內(nèi)容。
? ?
5)圖形顯示
我們還可以把PHP代碼中的各個(gè)函數(shù)調(diào)用關(guān)系以圖形的形式展現(xiàn)出來,這樣更加直觀。前提是需要python和dot兩個(gè)工具的支持,python默認(rèn)機(jī)器上自帶,但是dot需要安裝
? ??# yum install -y graphviz
點(diǎn)擊右上角的“show call graph”按鈕,就會(huì)出現(xiàn)漂亮的調(diào)用圖

當(dāng)前名稱:如何定位php程序訪問慢
標(biāo)題路徑:http://bm7419.com/article14/iicdde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、手機(jī)網(wǎng)站建設(shè)網(wǎng)站收錄、Google、響應(yīng)式網(wǎng)站、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站