关于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