PHP超時優(yōu)化

一、Nginx的超時配置
1、fastcgi_connct_timeout 60
Nginx和fastcgi進程建立連接的超時時間,默認60秒,如果超過了這個時間就斷開連接。

2、fastcgi_read_timeout 300
和fastcgi進程建立連接后獲得fastcgi進程響應(yīng)的超時時間,默認60秒,如果超過了這個時間都沒有獲得響應(yīng)就斷開連接。我們經(jīng)常碰到的是'504 Gateway Time-out',就是因為后端連接沒有在超時時間內(nèi)返回數(shù)據(jù)導致的。我們經(jīng)常碰到的是'502 Bad Gateway',是因為fastcig進程報錯,導致連接斷開。

3、fastcgi_send_timeout 300
Nginx向fastcgi進程發(fā)送請求的超時時間,默認60秒,如果超過了這個時間都沒有發(fā)送完就斷開連接??梢酝ㄟ^上傳比較大的文件,就會出現(xiàn)超時,然后就會返回'504 Gateway Time-out'。

二、PHP,PHP-FPM 的超時配置

1、max_execution_time 300
這個參數(shù)是在php.ini中設(shè)置的,說實在的這個參數(shù)沒有什么太大的意義,因為這個300秒的超時時間僅僅是統(tǒng)計本身代碼的執(zhí)行時間,不包括網(wǎng)絡(luò)請求,系統(tǒng)調(diào)用,數(shù)據(jù)庫查詢,sleep()等的時間,如果超過這個時間會產(chǎn)生一個'Fatal error: Maximum execution time'的錯誤,然后返回的是'500 Internal Server Error'。我們程序大部分的時間都是花在網(wǎng)絡(luò)請求,數(shù)據(jù)庫查詢方面的。

2、request_terminate_timeout 0
這個參數(shù)是在php-fpm中設(shè)置的,這個超時時間就是整個fastcgi花費的所有時間,這個和max_execution_time最大的不同,如果總時間超過了,會直接將FPM進程kill掉,然后返回'502 Bad Gateway'。很多人認為配置了這個參數(shù)max_execution_time就失效了,實際不是的,先達到哪個的超時時間就哪個配置起作用的。

建議是不要開啟這個參數(shù),因為如果你某個程序超時了,進程直接kill掉,你的數(shù)據(jù)完整性就沒有辦法保證了,可以在nginx那邊做連接超時的控制和做好程序請求第三方資源超時時間的控制。

三、接口請求方面的超時設(shè)置
這部分要特別注意,在沒有什么并發(fā)量的時候沒有什么問題,在并發(fā)量大的時候,如果有些對接的第三方系統(tǒng)掛了或是處理速度很慢了,你的FPM進程很快就會用完,然后就是各種502,然后很有可能的就是系統(tǒng)崩潰了。我們在框架層面,對需要用到的請求方法做了統(tǒng)一的封裝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容