今天就跟大家聊聊有關(guān)怎樣解決web中出現(xiàn)大量TIME_WAIT問(wèn)題,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,先為東興等服務(wù)建站,東興等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為東興企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
新增的一組Apache服務(wù)器上線以來(lái),我用netstat -an命令發(fā)現(xiàn)服務(wù)器中有大量狀態(tài)為TIME-WAIT的TCP連接,于是用/sbin/sysctl -a查看了一下Linux的各項(xiàng)內(nèi)核參數(shù),并翻閱有關(guān)資料,決定修改其中的兩項(xiàng)參數(shù),以達(dá)到減少TCP連接中TIME-WAIT sockets的目的。
vi /etc/sysctl.conf
編輯/etc/sysctl.conf文件,增加四行:
引用
net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30
說(shuō)明:
net.ipv4.tcp_syncookies = 1 #表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時(shí),啟用cookies來(lái)處理,可防范少量SYN***,默認(rèn)為0,表示關(guān)閉;
net.ipv4.tcp_tw_reuse = 1 #表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,表示關(guān)閉;
net.ipv4.tcp_tw_recycle = 1 #表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,表示關(guān)閉。
net.ipv4.tcp_fin_timeout = 30 #表示如果套接字由本端要求關(guān)閉,這個(gè)參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時(shí)間。
再執(zhí)行以下命令,讓修改結(jié)果立即生效:
/sbin/sysctl -p
用以下語(yǔ)句看了一下服務(wù)器的TCP狀態(tài):
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
返回結(jié)果如下:
ESTABLISHED 1423
FIN_WAIT1 1
FIN_WAIT2 262
SYN_SENT 1
TIME_WAIT 962
效果:處于TIME_WAIT狀態(tài)的sockets從原來(lái)的10000多減少到1000左右。處于SYN_RECV等待處理狀態(tài)的sockets為0,原來(lái)的為50~300。
下面附上TIME_WAIT狀態(tài)的意義:
客戶端與服務(wù)器端建立TCP/IP連接后關(guān)閉SOCKET后,服務(wù)器端連 接的端口
狀態(tài)為TIME_WAIT
是不是所有執(zhí)行主動(dòng)關(guān)閉的socket都會(huì)進(jìn)入TIME_WAIT狀態(tài) 呢?
有沒(méi)有什么情況使主動(dòng)關(guān)閉的socket直接進(jìn)入CLOSED狀態(tài)呢?
主動(dòng)關(guān)閉的一方在發(fā)送最后一個(gè) ack 后
就會(huì)進(jìn)入 TIME_WAIT 狀態(tài) 停留2MSL(max segment lifetime)時(shí)間
這個(gè)是TCP/IP必不可少的,也就是“解決”不了的。
也就是TCP/IP設(shè)計(jì)者本來(lái)是這么設(shè)計(jì)的
主要有兩個(gè)原因
1。防止上一次連接中的包,迷路后重新出現(xiàn),影響新連接
(經(jīng)過(guò)2MSL,上一次連接中所有的重復(fù)包都會(huì)消失)
2。可靠的關(guān)閉TCP連接
在主動(dòng)關(guān)閉方發(fā)送的最后一個(gè) ack(fin) ,有可能丟失,這時(shí)被動(dòng)方會(huì)重新發(fā)
fin, 如果這時(shí)主動(dòng)方處于 CLOSED 狀態(tài) ,就會(huì)響應(yīng) rst 而不是 ack。所以
主動(dòng)方要處于 TIME_WAIT 狀態(tài),而不能是 CLOSED 。
TIME_WAIT 并不會(huì)占用很大資源的。 還有,如果一方 send 或 recv 超時(shí),就會(huì)直接進(jìn)入 CLOSED 狀態(tài)。
看完上述內(nèi)容,你們對(duì)怎樣解決web中出現(xiàn)大量TIME_WAIT問(wèn)題有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。