解決系統中大量的TIME_WAIT連接


今天發現網站特別卡!!

查看網絡連接數:

netstat -an |wc -l

netstat -an |grep xx |wc -l        查看某個/特定ip的連接數

netstat -an |grep TIME_WAIT|wc -l    查看連接數等待time_wait狀態連接數

netstat -an |grep ESTABLISHED |wc -l    查看建立穩定連接數量

 

查看不同狀態的連接數數量

[root@cp-nginx ~]# netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'

LISTEN 8

ESTABLISHED 2400

FIN_WAIT1 2

TIME_WAIT 6000

 

查看每個ip跟服務器建立的連接數

[root@cp-nginx ~]# netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn

     31 45.116.147.178

     20 45.116.147.186

     12 23.234.45.34

     11 103.56.195.17

(PS:正則解析:顯示第5列,-F : 以:分割,顯示列,sort 排序,uniq -c統計排序過程中的重復行,sort -rn 按純數字進行逆序排序)

 

查看每個ip建立的ESTABLISHED/TIME_OUT狀態的連接數

[root@cp-nginx ~]# netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn

     24 103.56.195.17

     19 45.116.147.186

     18 103.56.195.18

     17 45.116.147.178

 

 

解決time_wait連接數大量問題

查詢到time_wait連接數過多情況下,調整內核參數:/etc/sysctl.conf

vim /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 = 300

 

/sbin/sysctl -p 讓參數生效,調優完成

 

參數詳解:

1.net.ipv4.tcp_syncookies = 1 表示開啟 syn cookies 。當出現 syn 等待隊列溢出時,啟用 cookies 來處理,可防范少量 syn ***,默認為 0 ,表示關閉; 

2.net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將 time-wait sockets 重新用於新的 tcp 連接,默認為 0 ,表示關閉;
3.net.ipv4.tcp_tw_recycle = 1 表示開啟 tcp 連接中 time-wait sockets 的快速回收,默認為 0 ,表示關閉。
4.net.ipv4.tcp_fin_timeout 修改系靳默認的 timeout 時間

 

 經過上面的設置后,發現網站time_wait連接數慢慢減少,網站速度也快多了!

如果以上配置調優后性能還不理想,可繼續修改一下配置:

vi /etc/sysctl.conf

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套接字拖死。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM