现象:
曲线异常,人数持续下降,与此同时服务器时通时不通
问题:
查看日志发现大量异常:
原因:
服务器访问量大,内核netfilter
模块conntrack
相关参数配置不合理,导致新连接被drop
掉。
这里看到上面最大值是65536
, 线上3台服务器差不多最大能支持190008个连接.
当时情况的确有19w+的连接,所以出现问题.
分析:
nf_conntrack
模块用于跟踪连接的状态,供其他模块使用(调用信息)
最常见的使用场景是iptables
的 nat
和 state
模块nf_conntrack
用1个HASH表
记录已建立的连接,包括其他机器到本机、本机到其他机器、本机到本机
如果连接进来比释放的快,把哈希表塞满了,此时netfilter
变成了一个黑洞,导致丢弃任何数据包。
命令:
netfilter
相关的内核参数:
max
的计算公式是:
hashsize
的计算公示是:
优化:
调大nf_conntrack_buckets
和nf_conntrack_max
,超时时间这里没有考虑