关于Centos 7服务器大量TIME_WAIT的原因及解决办法
关于Centos 7服务器大量TIME_WAIT的原因及解决办法

关于Centos 7服务器大量TIME_WAIT的原因及解决办法

关于Centos 7服务器大量TIME_WAIT的原因及解决办法

问题现象

nohup.out日志可能出现如下,hy.sh目录下运行控制台tail -500f nohup.out可能如下

请求地址'/api/v1/xxxx',发生数据库异常.

at org.springframework.jdbc.datasource.DataSourceUtils.getConnection

at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert

org.springframework.dao.QueryTimeoutException: Redis command timed out;

表现为java程序CPU占用巨高,控制台top可能如下

PID    USER  PR  NI  VIRT     RES     SHR    S  %CPU   %MEM  TIME+     COMMAND                                    
51743  root  20  0   8094512  6.219g  17604  S  831.9  18.6  12:10.55  java    

连接数检查可能如下,数值较大

# netstat -tanlp | grep TIME_WAIT | wc -l
2642

# netstat -tanlp | wc -l
4682

# 正常情况TIME_WAIT的数值应该不超过两位数

解决方案

# 修改文件
vi /etc/sysctl.conf
# 按下insert 新建行,粘贴以下命令
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000


# !wq  退出

# 生效
/sbin/sysctl -p