kernel TCP time wait bucket table overflow

 

# 故障描述

有一个需求是实时分析API接口访问日志,提取token去数据库查询对应的uid,而后收集一些指标存入到hbase中。

当程序执行一会后会被系统杀死 Killed ! 

# 故障排查

1、CPU平均负载0.06、内存空闲29G

2、查看系统日志 /var/log/messages

提示:kernel: TCP: time wait bucket table overflow

3、查找资料发现是由于 socket TIME_WAIT 超出了内核设定的上限值

# 解决方法

shell > vim /etc/sysctl.conf

net.ipv4.tcp_fin_timeout = 60       # 若是套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT-2 状态的时间,缩短能够减小 TIME_WAIT 状态数量

net.ipv4.tcp_max_tw_buckets = 5000  # TIME_WAIT 数量,超出的部分会被系统删除

net.ipv4.tcp_timestamps = 1         # 该参数与快速回收同时开启且网络环境属于NAT(SLB、LVS)这种状况下会出现问题,切记
net.ipv4.tcp_tw_reuse = 0           # 链接重用,下降 TIME_WAIT 状态数量
net.ipv4.tcp_tw_recycle = 0         # 快速回收 不建议开启,有可能致使没法创建 TCP 链接

net.ipv4.ip_local_port_range = 32768 60999  # 本地可用端口范围,增长会使服务器能够创建更多的链接,增长吞吐量

# 因此优化的结果以下:

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 60999
相关文章
相关标签/搜索