在Nginx + PHP-FPM這種架構模式下,因為Nginx充當的是反向代理伺服器,而超時大機率是由於PHP-FPM執行PHP指令碼導致的超時,所以我們不建議修改Nginx的超時配置,保持預設即可。而我們的重點工作是要檢查什麼原因導致PHP指令碼執行慢的。
那該如何定位問題呢?只能用排除法來一步步排查,現在總結我的經驗以供大家參考:
1、開啟PHP錯誤輸出
首先我們要保證PHP錯誤開關是開啟的,在php.ini中找到 display_errors 配置項設為 On ,然後重啟PHP-FPM使配置生效。
2、檢查程式碼中是否設定了 set_time_limit(0) ,如果沒有可以加上這行程式碼。
3、檢視Nginx和PHP-FPM日誌,看是否有錯誤丟擲(比如緩衝區超出、PHP程序不夠等),如果有則依據錯誤資訊對應解決。
4、找到慢請求URL對應的程式原始碼,檢視是否存在耗時操作,比如說:
程式裡請求了外部網路資源導致的超時,如:cURL、file_get_contents之類函式;
死迴圈;
資料庫、Redis連結超時等;
必要時藉助xhprof來分析PHP指令碼瓶頸。
透過以上步聚基本上是可以定位問題所在的,個人覺得PHP指令碼執行慢導致超時的可能性較大。
在Nginx + PHP-FPM這種架構模式下,因為Nginx充當的是反向代理伺服器,而超時大機率是由於PHP-FPM執行PHP指令碼導致的超時,所以我們不建議修改Nginx的超時配置,保持預設即可。而我們的重點工作是要檢查什麼原因導致PHP指令碼執行慢的。
那該如何定位問題呢?只能用排除法來一步步排查,現在總結我的經驗以供大家參考:
1、開啟PHP錯誤輸出
首先我們要保證PHP錯誤開關是開啟的,在php.ini中找到 display_errors 配置項設為 On ,然後重啟PHP-FPM使配置生效。
2、檢查程式碼中是否設定了 set_time_limit(0) ,如果沒有可以加上這行程式碼。
3、檢視Nginx和PHP-FPM日誌,看是否有錯誤丟擲(比如緩衝區超出、PHP程序不夠等),如果有則依據錯誤資訊對應解決。
4、找到慢請求URL對應的程式原始碼,檢視是否存在耗時操作,比如說:
程式裡請求了外部網路資源導致的超時,如:cURL、file_get_contents之類函式;
死迴圈;
資料庫、Redis連結超時等;
必要時藉助xhprof來分析PHP指令碼瓶頸。
透過以上步聚基本上是可以定位問題所在的,個人覺得PHP指令碼執行慢導致超時的可能性較大。