php-fpm的一次慢執行日志slow log


測試環境、預發布環境經過QA多番測試沒有遇到問題,但在一次上線過程中,在線上環境出現20秒的響應超時,這個毫無疑問,環境問題。

盡管線上數據量大,可Mysql也不至於慢到20秒,而且發現每次幾乎都是20.01~20.04秒之間,相差不到一秒鍾,mysql也不至於這么均勻,在好奇心下,運維大神配合查了一下Mysql慢查詢日志,發現沒有超時的sql日志,那這有可能就是php這邊出現的問題,可一想,邏輯執行也總不能這么慢。想打日志一步步跟蹤,這種方式有點慢。mysql 有慢查詢,同樣咱php也有慢日志。

使用php slow方式確實找到了問題所在,截圖如下:

 pconnect()原因導致,這個我當然清楚,是因為連接redis失敗導致。 因為是在新的服務器,所以連接不上核心項目的redis服務器,最終還是運維大神安裝的證書解決。

解決了問題后,大概了解如下:

一、開啟slow log方法:
如果你使用php-fpm來管理php的話,你可以通過如下方法開啟:

首先打開 php-fpm.conf 配置文件。

vim /usr/local/php/etc/php-fpm.conf

PHP 5.3.3 之前設置如下:

<value name="request_slowlog_timeout">5s</value>
< value name="slowlog">logs/php-fpm-slowlog.log</value>

PHP 5.3.3 之后設置以下如下:

request_slowlog_timeout = 5s slowlog = /usr/local/php/var/log/php-fpm-slowlog.log request_terminate_timeout = 10s

說明:
request_slowlog_timeout 是腳本超過多長時間,就可以記錄到日志文件;
slowlog 是日志文件的存儲路徑;
request_terminate_timeout 將執行時間太長的進程直接終止;

二、slow log如何使用?
開啟后,如果有腳本執行超過指定的時間,就會在指定的日志文件中寫入類似如上圖所示,執行格式:pid  進程號

日志說明:

script_filename 是入口文件
curl_exec() : 說明是執行這個方法的時候超過執行時間的。
exfilter_curl_get() :說明調用curl_exec()的方法是exfilter_curl_get() 。

每行冒號后面的數字是行號。

開啟后,在錯誤日志文件中也有相關記錄...去日志查看就可以了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM