背景
在做dispatchsvr傳送http請求到業務server的時候,client端設定了1s的timeout,結果當網路出現問題的時候,client出現了大量timeout,並且關閉連線,這時候發現client的cpu和記憶體有大量增長。
原理tcp
結束的過程如下
:server client
-------------- fin --------------> server: fin_wait_1
<------------- ack --------------- client: close_wait server:fin_wait_2
<------------- fin --------------- client
發出fin
之後就關閉
-------------- ack -------------> server
發出ack
後進入time_wait
狀態time_wait
的預設時間是2倍的
mls,就是
240秒鐘。
mls是
tcp片在網上的最長存活時間。
time_wait
的主要作用是保證關閉的
tcp埠不立即被使用。因為當網路存在延遲時,可能當某個埠被關閉後,網路中還有一些重傳的
tcp片在發向這個埠,如果這個埠立即建立新的
tcp連線,則可能會有影響。所以使用2倍的
msl時間來限制這個埠立即被使用。
解決方法
修改7層負載所在機器,/etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_fin_timeout = 30
儲存後sysctl -p生效
TCP 長連線 短連線
當網路通訊時採用tcp協議時,在真正的讀寫操作之前,server與client之間必須建立乙個連線,當讀寫操作完成後,雙方不再需要這個連線時它們可以釋放這個連線,連線的建立是需要三次握手的,而釋放則需要4次揮手,所以說每個連線的建立都是需要資源消耗和時間消耗的 示意圖 長連線 連線 資料傳輸 保持連...
tcp長連線與短連線
長連線就是在tcp建立連線後,讀寫一次資料完成之後並不立即釋放連線,而短連線是在一次tcp連線之後只進行一次資料的讀寫就釋放連線。程式設計中要使乙個套接字所建立的連線成為長連線,可以使用setsockopt 函式。它使用的是tcp的keepalive定時功能,利用sysctl a grep tcp ...
TCP 長連線和短連線
一 長連線與短連線 長連線 client方與server方先建立連線,連線建立後不斷開,然後再進行報文傳送和接收。這種方式下由於通訊連線一直存在。此種方式常用於p2p通訊。短連線 client方與server每進行一次報文收發交易時才進行通訊連線,交易完畢後立即斷開連線。此方式常用於一點對多點通訊。...