解決系統(tǒng)中大量的TIME_WAIT連接
今天發(fā)現(xiàn)網(wǎng)站特別卡!!
查看網(wǎng)絡(luò)連接數(shù):
netstat -an |wc -l
netstat -an |grep xx |wc -l 查看某個/特定ip的連接數(shù)
netstat -an |grep TIME_WAIT|wc -l 查看連接數(shù)等待time_wait狀態(tài)連接數(shù)
netstat -an |grep ESTABLISHED |wc -l 查看建立穩(wěn)定連接數(shù)量
查看不同狀態(tài)的連接數(shù)數(shù)量
[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跟服務器建立的連接數(shù)
[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統(tǒng)計排序過程中的重復行,sort -rn 按純數(shù)字進行逆序排序)
查看每個ip建立的ESTABLISHED/TIME_OUT狀態(tài)的連接數(shù)
[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連接數(shù)大量問題
查詢到time_wait連接數(shù)過多情況下,調(diào)整內(nèi)核參數(shù):/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 讓參數(shù)生效,調(diào)優(yōu)完成
參數(shù)詳解:
1.net.ipv4.tcp_syncookies = 1 表示開啟 syn cookies 。當出現(xiàn) syn 等待隊列溢出時,啟用 cookies 來處理,可防范少量 syn ***,默認為 0 ,表示關(guān)閉;
2.net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將 time-wait sockets 重新用于新的 tcp 連接,默認為 0 ,表示關(guān)閉;
3.net.ipv4.tcp_tw_recycle = 1 表示開啟 tcp 連接中 time-wait sockets 的快速回收,默認為 0 ,表示關(guān)閉。
4.net.ipv4.tcp_fin_timeout 修改系靳默認的 timeout 時間
經(jīng)過上面的設(shè)置后,發(fā)現(xiàn)網(wǎng)站time_wait連接數(shù)慢慢減少,網(wǎng)站速度也快多了!
如果以上配置調(diào)優(yōu)后性能還不理想,可繼續(xù)修改一下配置:
vi /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 1200 #表示當keepalive起用的時候,TCP發(fā)送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,可以容納更多等待連接的網(wǎng)絡(luò)連接數(shù)。 net.ipv4.tcp_max_tw_buckets = 5000 #表示系統(tǒng)同時保持TIME_WAIT套接字的最大數(shù)量,如果超過這個數(shù)字,TIME_WAIT套接字將立刻被清除并打印警告信息。 默認為180000,改為5000。 對于Apache、Nginx等服務器,上幾行的參數(shù)可以很好地減少TIME_WAIT套接字數(shù)量,但是對于 Squid,效果卻不大。此項參數(shù)可以控制TIME_WAIT套接字的最大數(shù)量,避免Squid服務器被大量的TIME_WAIT套接字拖死。

浙公網(wǎng)安備 33010602011771號