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 單系統壓測的問題單鏈路指乙個業務線。全...
全鏈路壓測
之前有和認識的同行聊過他們全鏈路壓測的一些技術實現方案,自己也看了很多相關的資料,這篇部落格,說說自己對全鏈路壓測的理解,以及整理的一些知識點。阿里全鏈路壓測 有讚全鏈路壓測 京東全鏈路壓測 餓了麼全鏈路壓測 一 什麼是全鏈路壓測 基於實際的生產業務場景 系統環境,模擬海量的使用者請求和資料對整個業...
全鏈路壓測筆記
公司業務發展,難有乙個量化的資料衡量核心鏈路的真實峰值。有助於提公升核心業務的穩定性。找出整個鏈路的瓶頸,優化少量的瓶頸部分提公升整體效能,以期達到用最少的資源達到最佳效果。認識誤區 不能單純認為壓測各個子系統後,整體系統沒有問題,因為涉及到業務訪問鏈路,多個業務可能有共用資源的瓶頸,主鏈路請求量增...