Linux运维:TCP系统配置

通过 "netstat  -anp | grep TIME_WAIT | wc -l" 发现大量的TIME_WAIT 的连接,可以通过调整系统内核参数来解决:

打开 sysctl.conf 文件,修改以下几个参数:
[root@web01 ~]# vim  /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 1
 
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30

相关查看命令:

 netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”\t”,state[key]}’

会得到类似下面的结果,具体数字会有所不同:

LAST_ACK 3
SYN_RECV 1
CLOSE_WAIT 7
ESTABLISHED 149
SYN_SENT 1
TIME_WAIT 1477

[root@web01 ~]# sysctl -a | grep time | grep wait
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
   
执行命令"netstat -na"查看到的相关TCP状态解释:
LISTEN:       侦听来自远方的TCP端口的连接请求;
SYN-SENT:     在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED: 在收到和发送一个连接请求后等待对方对连接请求的确认;
ESTABLISHED:  代表一个打开的连接;
FIN-WAIT-1:   等待远程TCP连接中断请求, 或先前的连接中断请求的确认;
FIN-WAIT-2:   从远程TCP等待连接中断请求;
CLOSE-WAIT:   等待从本地用户发来的连接中断请求;
CLOSING:      等待远程TCP对连接中断的确认;
LAST-ACK:     等待原来的发向远程TCP的连接中断请求的确认;
TIME-WAIT:    等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSE:        没有任何连接状态;

示例线上压测的值:
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_max_tw_buckets=5000
net.ipv4.ip_local_port_range = 1024 65535  // 区间值必须大于net.ipv4.tcp_max_tw_buckets

查看当前系统打开的文件数量

代码如下:
lsof | wc -l 
watch "lsof | wc -l" 

查看某一进程的打开文件数量

代码如下:
lsof -p pid | wc -l 
lsof -p 1234 | wc -l 

修改文件连接数,需要修改  /etc/security/limits.conf
supervisor的配置也会影响最小文件数
重启supervisor:
 systemctl list-units | grep super
systemctl restart supervisord.service

You May Also Like

About the Author: daidai5771

发表评论

电子邮件地址不会被公开。 必填项已用*标注