centOS 大量TIME_WAIT 的處理

來源:互聯網
上載者:User


今天發現linux機器無法用ssh串連並且上了機器也不能ping了,後面通過netstat -anp | grep TIME_WAIT | wc -l 命令查看數量發現有大量TIME_WAIT串連了,下面我們一起來看看出現大量TIME_WAIT問題解決方案。

word-spacing: 0px; -webkit-text-stroke-width: 0px; -webkit-text-size-adjust: auto">現象:

1、外部機器不能正常串連SSH

2、內向外不能夠正常的ping通過,網域名稱也不能正常解析。


問題排查:

通過 netstat  -anp | grep TIME_WAIT | wc -l 命令查看數量,發現TIME_WAIT的串連數量超過了18000太誇張了。

1、初步懷疑是程式沒有關閉串連,codereview了兩遍,發現,已經正常關閉。

2、網上看TIME_WAIT產生的原因,可能是因為伺服器主動關閉串連導致TIME_WAIT產生。

3、尋找TIME_WAIT解決方案:

pse: separate; font-family: Tahoma; white-space: normal; orphans: 2; letter-spacing: normal; font-weight: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; -webkit-text-size-adjust: auto; -webkit-text-decorations-in-effect: none">發現系統存在大量TIME_WAIT狀態的串連,通過調整核心參數解決,
vi /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

然後執行 /sbin/sysctl -p 讓參數生效。

 

經過配置後,暫時的問題是解決了,再查看TIME_WAIT數量快速下降。

 

關鍵命令:

 

1、netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'

會得到類似下面的結果,具體數字會有所不同:

LAST_ACK 1
SYN_RECV 14
ESTABLISHED 79
FIN_WAIT1 28
FIN_WAIT2 3
CLOSING 5
TIME_WAIT 1669

狀態:描述
CLOSED:無串連是活動的或進行中
LISTEN:伺服器在等待進入呼叫
SYN_RECV:一個串連請求已經到達,等待確認
SYN_SENT:應用已經開始,開啟一個串連
ESTABLISHED:正常資料轉送狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另一邊已同意釋放
ITMED_WAIT:等待所有分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另一邊已初始化一個釋放
LAST_ACK:等待所有分組死掉


2、sysctl -a | grep time | grep wait
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

 

  欄位說明:   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,表示關閉。   net.ipv4.tcp_fin_timeout = 30 表示如果通訊端由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。   net.ipv4.tcp_keepalive_time = 1200 表示當keepalive起用的時候,TCP發送keepalive訊息的頻度。預設是2小時,改為20分鐘。   net.ipv4.ip_local_port_range = 1024 65000 表示用於向外串連的連接埠範圍。預設情況下很小:32768到61000,改為1024到65000。   net.ipv4.tcp_max_syn_backlog = 8192 表示SYN隊列的長度,預設為1024,加大隊列長度為8192,可以容納更多等待串連的網路連接數。    net.ipv4.tcp_max_tw_buckets = 5000 表示系統同時保持 TIME_WAIT通訊端的最大數量,如果超過這個數字,TIME_WAIT通訊端將立刻被清除並列印警告資訊。預設為180000,改為5000。對於Apache、Nginx等伺服器,上幾行的參數可以很好地減少TIME_WAIT通訊端數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT通訊端的最大數量,避免Squid伺服器被大量的TIME_WAIT通訊端拖死。 剛才列印出來的資料: TIME_WAIT 80
FIN_WAIT1 9
ESTABLISHED 317
FIN_WAIT2 710 :由net.ipv4.tcp_fin_timeout = 30決定,此時保持30秒,計算了一下,有130個http連結,5秒重新整理一次,130*(30/5)=780,基本符合。
SYN_RECV 2
CLOSING 1
LAST_ACK 1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.