新增的一組apache伺服器上線以來,我用netstat -an命令發現伺服器中有大量狀態為time-wait的tcp連線,於是用/sbin/sysctl -a檢視了一下linux的各項核心引數,並翻閱有關資料,決定修改其中的兩項引數,以達到減少tcp連線中time-wait sockets的目的。
vi /etc/sysctl.conf
引用
net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
說明:
net.ipv4.tcp_syncookies = 1 #表示開啟syn cookies。當出現syn等待佇列溢位時,啟用cookies來處理,可防範少量syn***,預設為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1 #表示開啟重用。允許將time-wait sockets重新用於新的tcp連線,預設為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1 #表示開啟tcp連線中time-wait sockets的快速**,預設為0,表示關閉。
再執行以下命令,讓修改結果立即生效:
/sbin/sysctl -p
用以下語句看了一下伺服器的tcp狀態:
netstat -n | awk '/^tcp/ end '返回結果如下:
established 1423
fin_wait1 1
fin_wait2 262
syn_sent 1
time_wait 962
效果:處於time_wait狀態的sockets從原來的10000多減少到1000左右。處於syn_recv等待處理狀態的sockets為0,原來的為50~300。
下面附上time_wait狀態的意義:
客戶端與伺服器端建立tcp/ip連線後關閉socket後,伺服器端連 接的埠
狀態為time_wait
是不是所有執行主動關閉的socket都會進入time_wait狀態 呢?
有沒有什麼情況使主動關閉的socket直接進入closed狀態呢?
主動關閉的一方在傳送最後乙個 ack 後
就會進入 time_wait 狀態 停留2msl(max segment lifetime)時間
這個是tcp/ip必不可少的,也就是「解決」不了的。
也就是tcp/ip設計者本來是這麼設計的
主要有兩個原因
1。防止上一次連線中的包,迷路後重新出現,影響新連線
(經過2msl,上一次連線中所有的重複包都會消失)
2。可靠的關閉tcp連線
在主動關閉方傳送的最後乙個 ack(fin) ,有可能丟失,這時被動方會重新發
fin, 如果這時主動方處於 closed 狀態 ,就會響應 rst 而不是 ack。所以
主動方要處於 time_wait 狀態,而不能是 closed 。
time_wait 並不會占用很大資源的,除非受到***。
還有,如果一方 send 或 recv 超時,就會直接進入 closed 狀態。
本文出自 「為生活喝彩
」 部落格,請務必保留此出處
解決web中出現大量TIME WAIT問題
新增的一組apache伺服器上線以來,我用netstat an命令發現伺服器中有大量狀態為time wait的tcp連線,於是用 sbin sysctl a檢視了一下linux的各項核心引數,並翻閱有關資料,決定修改其中的兩項引數,以達到減少tcp連線中time wait sockets的目的。vi...
解決web中出現大量TIME WAIT問題
新增的一組apache伺服器上線以來,我用netstat an命令發現伺服器中有大量狀態為time wait的tcp連線,於是用 sbin sysctl a檢視了一下linux的各項核心引數,並翻閱有關資料,決定修改其中的兩項引數,以達到減少tcp連線中time wait sockets的目的。vi...
解決使用fastJson中出現 ref問題
首先 部門與組織是manytoone和onetomany的關係,並且兩張表都有自關聯,查詢部門資訊時會級聯查詢上級部門以及他的組織結構,然後返回json資料時,會出現 ref 即 為了攻破它,在兩張表的onetomany那方,也就是set的那方,加乙個fastjson的註解 jsonfield se...