dmesg 中的 nf_conntrack 投诉

dmesg 中的 nf_conntrack 投诉

在调查有关 HTTP 服务器性能不佳的投诉时,我发现我的 Xen XCP 主机的 dmesg 中有这样几行,该主机包含一个带有该服务器的客户操作系统:

[11458852.811070] net_ratelimit:抑制了 321 个回调
[11458852.811075] nf_conntrack:表已满,丢弃数据包。
[11458852.819957] nf_conntrack:表已满,丢弃数据包。
[11458852.821083] nf_conntrack:表已满,丢弃数据包。
[11458852.822195] nf_conntrack:表已满,丢弃数据包。
[11458852.824987] nf_conntrack:表已满,丢弃数据包。
[11458852.825298] nf_conntrack:表已满,丢弃数据包。
[11458852.825891] nf_conntrack:表已满,丢弃数据包。
[11458852.826225] nf_conntrack:表已满,丢弃数据包。
[11458852.826234] nf_conntrack:表已满,丢弃数据包。
[11458852.826814] nf_conntrack:表已满,丢弃数据包。

每五秒重复一次投诉(每次抑制的回调次数不同)。

这些症状意味着什么?这很严重吗?有什么提示吗?

(请注意,这个问题比“如何解决 HTTP 服务器性能不佳的具体情况”更窄,因此我不会提供更多细节。)

附加信息:

$ uname -a
Linux MYHOST 3.2.0-24-generic #37-Ubuntu SMP 2012 年 4 月 25 日星期三 08:43:22 UTC x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release-a
无可用的 LSB 模块。
分销商 ID:Ubuntu
描述:Ubuntu 12.04 LTS
发行:12.04
代号:精确

$ cat /proc/sys/net/netfilter/nf_conntrack_max
1548576

该服务器的日点击量约为1000万次。

更新:

Dom0 上的 iptables:

$ iptables -L -t nat -v
链 PREROUTING(策略接受 23155 个数据包,1390K 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链输入(策略接受9个数据包,720字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链输出(策略接受 27 个数据包,1780 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链 POSTROUTING(策略接受 23173 个数据包,1392K 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标

$ iptables -L -v
链输入(策略接受13976个数据包,1015K字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链转发(策略接受 241K 数据包,24M 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链输出(策略接受 13946 个数据包,1119K 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标

其中一个 DomU 上的 iptables:

$ iptables -L -t nat -v
链 PREROUTING(策略接受 53465 个数据包,2825K 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链输入(策略接受 53466 个数据包,2825K 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链输出(策略接受 51527 个数据包,3091K 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链 POSTROUTING(策略接受 51527 个数据包,3091K 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标

$ iptables -L -v
链输入(策略接受539K数据包,108M字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链转发(策略接受 0 个数据包,0 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         

链输出(策略接受 459K 数据包,116M 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标

答案1

我对这个有点好奇,并找到了一个相当不错的解释。它们在nf_conntrack:表格已满 - 缺乏规则如何导致意外行为

TL;DR:只需运行iptables -t nat -vnL即可开始加载nf_conntrack模块,从而导致意外的状态防火墙。我还没有亲自验证这一点,你可以打赌我明天上班时会做对的。

解决方案:如果您不需要 NAT,因为无论如何您都会进行桥接,请卸载模块nf_conntrack_*以及依赖于这些模块的所有其他依赖模块。完全禁用防火墙chkconfig ip[6]tables off也是一个好主意。

sudo ufw disable可以通过以下方法禁用 Ubuntu 中的防火墙这些说明如果您不想重新启动。

答案2

Xen 必须对连接到您的 domU 服务器的连接进行 NAT,而连接数量之多超出了内核跟踪它们的能力。虽然您可以通过增加 来增加分配给跟踪连接的空间nf_conntrack_max,但您可能最好使用桥接网络而不是 NAT。这样,domU 服务器就有了自己的虚拟以太网卡,从而完全避免了这个问题。

相关内容