最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

探討如何減少Linux服務(wù)器TIME_WAIT過多的問題

 更新時間:2013年06月04日 09:32:36   作者:  
本篇文章是對如何減少Linux服務(wù)器TIME_WAIT過多的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

TIME_WAIT狀態(tài)的意義:
客戶端與服務(wù)器端建立TCP/IP連接后關(guān)閉SOCKET后,服務(wù)器端連接的端口狀態(tài)為TIME_WAIT
是不是所有執(zhí)行主動關(guān)閉的socket都會進(jìn)入TIME_WAIT狀態(tài)呢?
有沒有什么情況使主動關(guān)閉的socket直接進(jìn)入CLOSED狀態(tài)呢?
主動關(guān)閉的一方在發(fā)送最后一個 ack 后就會進(jìn)入 TIME_WAIT 狀態(tài) 停留2MSL(max segment lifetime)時間,這個是TCP/IP必不可少的,也就是“解決”不了的。
也就是TCP/IP設(shè)計者本來是這么設(shè)計的。

主要有兩個原因
1。防止上一次連接中的包,迷路后重新出現(xiàn),影響新連接(經(jīng)過2MSL,上一次連接中所有的重復(fù)包都會消失)
2。可靠的關(guān)閉TCP連接
在主動關(guān)閉方發(fā)送的最后一個 ack(fin) ,有可能丟失,這時被動方會重新發(fā)fin, 如果這時主動方處于 CLOSED 狀態(tài) ,就會響應(yīng) rst 而不是 ack。所以主動方要處于 TIME_WAIT 狀態(tài),而不能是 CLOSED 。
TIME_WAIT 并不會占用很大資源的,除非受到攻擊。
在Squid服務(wù)器中可輸入如下命令:
#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122
狀態(tài):描述
CLOSED:無連接是活動的或正在進(jìn)行
LISTEN:服務(wù)器在等待進(jìn)入呼叫
SYN_RECV:一個連接請求已經(jīng)到達(dá),等待確認(rèn)
SYN_SENT:應(yīng)用已經(jīng)開始,打開一個連接
ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài)
FIN_WAIT1:應(yīng)用說它已經(jīng)完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關(guān)閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉
也就是說,這條命令可以把當(dāng)前l(fā)inux服務(wù)器的網(wǎng)絡(luò)連接狀態(tài)分類匯總。
下面解釋一下為啥要這樣寫:
一個簡單的管道符連接了netstat和awk命令。
先來看看netstat:
netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT
你實(shí)際執(zhí)行這條命令的時候,可能會得到成千上萬條類似上面的記錄,不過我們就拿其中的一條就足夠了。
再來看看awk:
/^tcp/
濾出tcp開頭的記錄,屏蔽udp, socket等無關(guān)記錄。
state[]
相當(dāng)于定義了一個名叫state的數(shù)組
NF
表示記錄的字段數(shù),如上所示的記錄,NF等于6
$NF
表示某個字段的值,如上所示的記錄,$NF也就是$6,表示第6個字段的值,也就是TIME_WAIT
state[$NF]
表示數(shù)組元素的值,如上所示的記錄,就是state[TIME_WAIT]狀態(tài)的連接數(shù)
++state[$NF]
表示把某個數(shù)加一,如上所示的記錄,就是把state[TIME_WAIT]狀態(tài)的連接數(shù)加一
END
表示在最后階段要執(zhí)行的命令
for(key in state)
遍歷數(shù)組
print key,”\t”,state[key]
打印數(shù)組的鍵和值,中間用\t制表符分割,美化一下。
如發(fā)現(xiàn)系統(tǒng)存在大量TIME_WAIT狀態(tài)的連接,通過調(diào)整內(nèi)核參數(shù)解決,
vim /etc/sysctl.conf
編輯文件,加入以下內(nèi)容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后執(zhí)行 /sbin/sysctl -p 讓參數(shù)生效。
Linux下高并發(fā)的Squid服務(wù)器,TCP TIME_WAIT套接字?jǐn)?shù)量經(jīng)常達(dá)到兩、三萬,服務(wù)器很容易被拖死。通過修改Linux內(nèi)核參數(shù),可以減少Squid服務(wù)器的TIME_WAIT套接字?jǐn)?shù)量。
vi /etc/sysctl.conf
增加以下幾行:引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
說明:
net.ipv4.tcp_syncookies = 1 表示開啟SYN Cookies。當(dāng)出現(xiàn)SYN等待隊(duì)列溢出時,啟用cookies來處理,可防范少量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)閉,這個參數(shù)決定了它保持在FIN-WAIT-2狀態(tài)的時間。
net.ipv4.tcp_keepalive_time = 1200 表示當(dāng)keepalive起用的時候,TCP發(fā)送keepalive消息的頻度。缺省是2小時,改為20分鐘。
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外連接的端口范圍。缺省情況下很?。?2768到61000,改為1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN隊(duì)列的長度,默認(rèn)為1024,加大隊(duì)列長度為8192,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。
net.ipv4.tcp_max_tw_buckets = 5000表示系統(tǒng)同時保持TIME_WAIT套接字的最大數(shù)量,如果超過這個數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息。默認(rèn)為 180000,改為5000。對于Apache、Nginx等服務(wù)器,上幾行的參數(shù)可以很好地減少TIME_WAIT套接字?jǐn)?shù)量,但是對于Squid,效 果卻不大。此項(xiàng)參數(shù)可以控制TIME_WAIT套接字的最大數(shù)量,避免Squid服務(wù)器被大量的TIME_WAIT套接字拖死。
執(zhí)行以下命令使配置生效:
/sbin/sysctl -p

相關(guān)文章

最新評論

克什克腾旗| 泗洪县| 黔东| 阜宁县| 临沧市| 宁安市| 荥阳市| 琼结县| 读书| 濉溪县| 咸宁市| 望江县| 贡觉县| 九龙县| 遵义市| 东乌珠穆沁旗| 夏邑县| 土默特右旗| 天门市| 呼伦贝尔市| 瑞安市| 淮滨县| 象山县| 兴文县| 泾阳县| 天镇县| 琼海市| 宿州市| 乐昌市| 九寨沟县| 育儿| 青河县| 武陟县| 绵阳市| 晋江市| 灵川县| 察雅县| 耒阳市| 肇州县| 通化市| 东辽县|