nginx php全鏈路超時設定,一次性搞懂

2021-10-24 06:39:05 字數 1882 閱讀 6769

php相關設定

避免沒有超時機制的請求

不同超時設定起作用的狀態碼

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

proxy_connect_timeout 15s;#連線超時

proxy_read_timeout 24s;#讀超時

proxy_send_timeout 10s; #寫超時

php.ini 中max_execution_time = 300

php-fpm.confrequest_terminate_timeout = 100

基本公式如下:

超時時間 = min(max_execution_time,request_terminate_timeout)

注意set_time_limit()函式和配置指令max_execution_time只影響指令碼本身執行的時間。任何發生在諸如使用system(),file_get_contents()的系統呼叫,流操作,資料庫操作等不會被計算在執行時間中,request_terminate_timeout就是真正的執行時間

如果是max_execution_time起作用,http狀態碼為500 頁面會顯示最大執行時間等報錯資訊,而request_terminate_timeout起作用,http狀態碼為502 頁面返回的內容為nginx502頁面

在使用file_get_contents函式時,如果不設定超時,而請求的介面又不能很快的返回時,可能能會導致request_terminate_timeout超時,子程序會被kill 系統提示頁面報 502,被系統kill後,資料的完整性無法保證,應盡量避免沒有超時限制的請求操作,包括mysql的連線,執行,redis的連線等

使用curl請求也要設定超時時間

/**

* 統一封裝的file_get_contents, 原生的file_get_contents絕對不能使用,沒有設定超時時間,如果碰到網路問題,這個程序會一直卡在那邊,併發高的時候這裡會卡住大量程序,導致單機併發上不去

* * @param string $url 請求url

* @param integer $timeout 超時時間

* @param array $header 請求頭部

* @return

*/function

pft_file_get_contents

($url

,$timeout=10

,$header=[

])$context

=stream_context_create

($contextoptions);

$res

=file_get_contents

($url

,false

,$context);

return

$res

;}

超時設定

狀態碼max_execution_time

500request_terminate_timeout

502fastcgi_read_timeout

504proxy_read_timeout

504

全鏈路壓測

2013年為了雙11提前預演而誕生,該服務已提供在阿里雲pts鉑金版。1.1.1 系統可用性問題 經常由下面一些不確定性因素引起 1.1.2 傳統線上單機與單系統壓測的四種方式 從流量分配的角度,將流量集中到某台機器 這兩種方式要求訪問流量不能太小 1.1.3 單系統壓測的問題單鏈路指乙個業務線。全...

全鏈路壓測

之前有和認識的同行聊過他們全鏈路壓測的一些技術實現方案,自己也看了很多相關的資料,這篇部落格,說說自己對全鏈路壓測的理解,以及整理的一些知識點。阿里全鏈路壓測 有讚全鏈路壓測 京東全鏈路壓測 餓了麼全鏈路壓測 一 什麼是全鏈路壓測 基於實際的生產業務場景 系統環境,模擬海量的使用者請求和資料對整個業...

全鏈路壓測筆記

公司業務發展,難有乙個量化的資料衡量核心鏈路的真實峰值。有助於提公升核心業務的穩定性。找出整個鏈路的瓶頸,優化少量的瓶頸部分提公升整體效能,以期達到用最少的資源達到最佳效果。認識誤區 不能單純認為壓測各個子系統後,整體系統沒有問題,因為涉及到業務訪問鏈路,多個業務可能有共用資源的瓶頸,主鏈路請求量增...