您好,登錄后才能下訂單哦!
利用php-fpm的慢日志定位故障
今天上午,開發小哥向我反映一臺開發機訪問時速度非常慢,讓我幫他找一下原因,然后我就開始了一個排錯的過程,當時我的思路是這樣的:判斷網絡是否有問題,判斷開發機資源是否耗盡,判斷各服務是否正常運行,判斷代碼問題。
網絡問題較為簡單了,ping一下,traceroute一下,發現沒有問題,網絡很正常。排除了網絡問題以后就要判斷是否是服務器資源耗盡了,然后我ssh登陸到開發機上,使用top命令,看到的結果如下:
從這個結果來看,服務器資源還是很富裕的,問題不在這里。那接下來就要查找是不是各服務的問題了。
訪問速度慢,最大的可能是緩存的問題,memcached是否掛了,memcached的內存是否夠用,于是,我先查看了一下memcached的運行狀態,發現其運行十分正常,然后又重新啟動并增加了memcached的內存,但是訪問速度依然很慢,看來故障并不是在這里,接著排錯。
既然不是緩存的問題,那我又在想,會不會是php進程開啟的少了呢?然后我查了一下php的進程池:
從結果我們也可以看出來,php的進程是很多的,基本排除了php進程問題,那現在我的排錯就進入了一個瓶頸,這時就感到自己知識的饋乏性了,最后還是在大牛的提醒下,讓我查一下php的慢日志。由于本屌是一個新手,經驗與技術都有所欠缺,所以對慢日志并沒有多大的映像,畢竟在自己學習的過程中是很少用到這個日志的。
既然查找慢日志,那么我做的第一步是開啟php-fpm的慢日志功能,在php-fpm.conf配置文件中找到如下兩條配置:
; The timeout for serving a single request after which a PHP backtrace will be ; dumped to the 'slowlog' file. A value of '0s' means 'off'. ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) ; Default Value: 0 request_slowlog_timeout = 5 ; The log file for slow requests ; Default Value: not set ; Note: slowlog is mandatory if request_slowlog_timeout is set slowlog = /var/log/php-fpm/www-slow.log
其中,request_slowlog_timeout = 5 這條配置表示,將執行時間超過5秒的php進程記錄進入慢日志,為什么要設置為5秒呢?這是因為我查看了我網頁的請求時間,響應時間大概在13秒左右;
slowlog = /var/log/php-fpm/www-slow.log 這條配置指定慢日志的位置。
開啟慢日志后,使用命令tail -F /var/log/php-fpm/www-slow.log來實時動態的查看日志內容,同時再繼續訪問該服務器,然后發現,在慢日志的輸出中,有多個函數的執行時間超過了5秒,看來問題就出在這里了。然后我找了開發人員,反映了這個執行較慢的腳本和函數,經過他們的查找,發現是代碼中有一個配置沒有更新導致的,修改代碼后問題解決。
從這個運維事件中,我又積累到了一些實際生產環境中的運維經驗,這一點是我值得記錄的地方,可能這篇文章在許多大牛的眼里就是渣渣,但解決這個問題的過程與經驗對于我來說是真正的寶貴財富,我也相信,只要我一點一滴的記錄、積累,我也會變成一只大牛的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。