解决系统中大量的TIME_WAIT链接

今天发现网站特别卡!!nginx

查看网络链接数:vim

netstat -an |wc -l服务器

netstat -an |grep xx |wc -l        查看某个/特定ip的链接数cookie

netstat -an |grep TIME_WAIT|wc -l    查看链接数等待time_wait状态链接数网络

netstat -an |grep ESTABLISHED |wc -l    查看创建稳定链接数量socket

 

查看不一样状态的链接数数量tcp

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

LISTEN 8网站

ESTABLISHED 2400ui

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套接字拖死。
相关文章
相关标签/搜索