溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

因超多短連接導致的過多TIME_WAIT的處理方案

發(fā)布時間:2020-06-27 20:30:39 來源:網絡 閱讀:1213 作者:13348612118 欄目:網絡安全

近期,發(fā)現WEB服務器netstat -nap時,超多TIME_WAIT 狀態(tài)的連接,每臺WEB超過 2萬,峰值超4萬;導致服務響應變慢 ;


WEB服務器跑的是PHP程序,這些程序需要調用后端的MemCache,mysql,Redis,mongodb以及后端的 http接口服務,其中MemCache、http接口服務的調用量相對較大;


根據BAIDU的結果,分析原因為,PHP為CGI方式,一個頁面請求可能會有幾十次的各種內部調用,程序執(zhí)行完后,連接就斷開了,根據網絡協議,斷開的連接必然會保持一段時間的TIME_WAIT,默認是保持4分鐘;如果4分鐘內的請求數過高,如超過3萬,本機的TCP端口數必然會不夠用(默認情況下,linux臨時端口號范圍是(32768,61000),本機可用于調用的端口約3萬個),進而導致調用后端服務阻塞,頁面響應變慢;


處理方式:根據以上分析,對OS系統內核參數做修改,啟用TIME_WAIT連接重用,TIME_WAIT連接回收、縮短連接保持時間、增加可用端口數:


#vi /etc/sysctl.conf

    net.ipv4.tcp_tw_reuse = 1                #啟用連接重用

net.ipv4.tcp_tw_recycle = 1              #啟用連接回收

net.ipv4.tcp_fin_timeout = 30            #縮短連接保持時間

net.ipv4.ip_local_port_range=1024 65000  #增加可用端口數,linux默認臨時端口號范圍是(32768,61000)


#sysctl -p                          #修改參數生效;


注意:這里有個坑,需要確認 net.ipv4.tcp_timestamps = 1(這是默認值),net.ipv4.tcp_tw_recycle = 1 這個參數才有效;


另外,net.ipv4.tcp_tw_recycle = 1 這個參數如果是在對公網用戶提供的服務器,不能啟用,如果啟用,會導致其它問題;具體參考 (http://blog.sina.com.cn/s/blog_781b0c850100znjd.html


修改以上參數后,連接數大為降低!!


總結:從以上分析看,主要是內部調用過多,而且又基本上是短連接,導致了大量的TIME_WAIT;

從應用設計上看,應該盡量采用長連接,連接池,KEEPALIVE等技術減少對后端的連接次數,提高連接的效率,這樣可以大大減少連接數,問題也就不存在了!


當然,本案例中,前端調用程序為PHP程序,因PHP本身的特性(CGI試,一個頁面處理完成后,所有相關連接就斷了),導致不太好使用長連接,連接池,KEEPALIVE技術;但仍可以在本頁面請求內部使用,也可以一定程度上減少連接次數;


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI