netstat -ant|awk '/^tcp/ end '
last_ack 14
syn_recv 348
established 70
fin_wait1 229
fin_wait2 30
closing 33
time_wait 18122
# 命令解釋
closed:無連線是活動的或正在進行
listen:伺服器在等待進入呼叫
syn_recv:乙個連線請求已經到達,等待確認
syn_sent:應用已經開始,開啟乙個連線
established:正常資料傳輸狀態
fin_wait1:應用說它已經完成
fin_wait2:另一邊已同意釋放
itmed_wait:等待所有分組死掉
closing:兩邊同時嘗試關閉
time_wait:另一邊已初始化乙個釋放
last_ack:等待所有分組死掉
看awk:
/^tcp/
濾出tcp開頭的記錄,遮蔽udp, socket等無關記錄。
state相當於定義了乙個名叫state的陣列
nf表示記錄的字段數,如上所示的記錄,nf等於6
$nf表示某個欄位的值,如上所示的記錄,$nf也就是$6,表示第6個字段的值,也就是time_wait
state[$nf]表示陣列元素的值,如上所示的記錄,就是state[time_wait]狀態的連線數
++state[$nf]表示把某個數加一,如上所示的記錄,就是把state[time_wait]狀態的連線數加一
end表示在最後階段要執行的命令
for(key in state)
遍歷陣列
如何盡量處理timewait過多?
# 表示開啟syn cookies。當出現syn等待佇列溢位時,啟用cookies來處理,可防範少量syn攻擊,預設為0,表示關閉;
net.ipv4.tcp_syncookies = 1
# 表示開啟重用。允許將time-wait sockets重新用於新的tcp連線,預設為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1
# 表示開啟tcp連線中time-wait sockets的快速**,預設為0,表示關閉。
net.ipv4.tcp_tw_recycle = 1
# 修改系預設的 timeout 時間
net.ipv4.tcp_fin_timeout = 30
簡單來說,就是開啟系統的timewait重用和快速**。
如果以上配置調優後效能還不理想,可繼續修改一下配置:
# 表示當keepalive起用的時候,tcp傳送keepalive訊息的頻度。預設是2小時,改為20分鐘。
net.ipv4.tcp_keepalive_time = 1200
# 表示用於向外連線的埠範圍。預設情況下很小:32768到61000,改為1024到65000。
net.ipv4.ip_local_port_range = 1024 65000
# 表示syn佇列的長度,預設為1024,加大佇列長度為8192,可以容納更多等待連線的網路連線數。
net.ipv4.tcp_max_syn_backlog = 8192
# 表示系統同時保持time_wait套接字的最大數量,如果超過這個數字,time_wait套接字將立刻被清除並列印警告資訊。
預設為180000,改為5000。對於apache、nginx等伺服器,上幾行的引數可以很好地減少time_wait套接字數量,但是對於 squid,效果卻不大。此項引數可以控制time_wait套接字的最大數量,避免squid伺服器被大量的time_wait套接字拖死。
net.ipv4.tcp_max_tw_buckets = 5000
解決TIME WAIT過多問題
netstat n awk tcp end last ack 14 syn recv 348 established 70 fin wait1 229 fin wait2 30 closing 33 time wait 18122 狀態 描述 closed 無連線是活動的或正在進行 listen 伺...
解決TIME WAIT過多問題
netstat n awk tcp end last ack 14 syn recv 348 established 70 fin wait1 229 fin wait2 30 closing 33 time wait 18122 狀態 描述 closed 無連線是活動的或正在進行 listen 伺...
解決TIME WAIT過多造成的問題
tcp ip time wait狀態原理 通訊雙方建立tcp連線後,主動關閉連線的一方就會進入time wait狀態 客戶端主動關閉連線時,會傳送最後乙個ack後,然後會進入time wait狀態,再停留2個msl時間 後有msl的解釋 進入closed狀態 下圖是以客戶端主動關閉連線為例,說明這一...