nf_conntrack: table full, dropping packet
写在前边的话netfilter/conntrack 相关内核参数往往是用 Linux 服务器的互联网小公司业务量上去之后遇到的第 3 个“新手怪”。(第 1 位:进程可用的 FD 不足,第 2 位:IP 临时端口不足 + TIME_WAIT 状态的连接过多导致无法建立新连接)
很多人以为 Linux 经过这么多年优化,默认参数应该“足够好”,其实不是。默认参数面向“通用”服务器,不适用于连接数和访问量比较多的场景。
症状服务器负载正常,但请求大量超时,服务器/应用访问日志看不到相关请求记录。
在 dmesg 或 /var/log/messages 看到大量以下记录:
kernel: nf_conntrack: table full, dropping packet.
原因服务器访问量大,内核 netfilter 模块 conntrack 相关参数配置不合理,导致 IP 包被丢掉,连接无法建立。
详细nf_conntrack 模块在 kernel 2.6.15(2006-01-03 发布) 被引入,支持 IPv4 和 IPv6,取代只支持 IPv4 的 ip_connktrack,用 ...