測試環境、預發布環境經過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() 。
每行冒號后面的數字是行號。
開啟后,在錯誤日志文件中也有相關記錄...去日志查看就可以了