现象:

曲线异常,人数持续下降,与此同时服务器时通时不通

问题:

查看日志发现大量异常:

原因:

服务器访问量大,内核netfilter模块conntrack相关参数配置不合理,导致新连接被drop掉。
这里看到上面最大值是65536, 线上3台服务器差不多最大能支持190008个连接.
当时情况的确有19w+的连接,所以出现问题.

分析:

nf_conntrack模块用于跟踪连接的状态,供其他模块使用(调用信息)
最常见的使用场景是iptablesnatstate 模块
nf_conntrack用1个HASH表记录已建立的连接,包括其他机器到本机、本机到其他机器、本机到本机
如果连接进来比释放的快,把哈希表塞满了,此时netfilter变成了一个黑洞,导致丢弃任何数据包。

命令:

netfilter 相关的内核参数:

max的计算公式是:

hashsize的计算公示是:

优化:

调大nf_conntrack_bucketsnf_conntrack_max,超时时间这里没有考虑

相关资料:

Conntrack tuning
nf_conntrack_max优化

01-21 21:55
查看更多