在调查有关 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 Wed Apr 25 08:43:22 UTC 2012 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
服务器的点击量约为 10M / 天。
更新:
Dom0 上的 iptables:
$ iptables -L -t nat -v Chain PREROUTING (policy ACCEPT 23155 packets, 1390K bytes) pkts bytes target prot opt in out 源目的地 Chain INPUT (policy ACCEPT 9 packets, 720 bytes) pkts bytes target prot opt in out 源目的地 Chain OUTPUT (policy ACCEPT 27 packets, 1780 bytes) pkts bytes target prot opt in out 源目的地 Chain POSTROUTING (policy ACCEPT 23173 packets, 1392K bytes) pkts bytes target prot opt in out 源目的地 $ iptables -L -v Chain INPUT(策略接受 13976 个数据包,1015K 字节) pkts bytes target prot opt in out 源目的地 Chain FORWARD(策略接受 241K 数据包,24M 字节) pkts bytes target prot opt in out 源目的地 Chain OUTPUT (policy ACCEPT 13946 packets, 1119K bytes) pkts bytes target prot opt in out 源目的地
DomU 之一上的 iptables:
$ iptables -L -t nat -v Chain PREROUTING (policy ACCEPT 53465 packets, 2825K bytes) pkts bytes target prot opt in out 源目的地 Chain INPUT(策略接受 53466 个数据包,2825K 字节) pkts bytes target prot opt in out 源目的地 Chain OUTPUT(策略接受 51527 个数据包,3091K 字节) pkts bytes target prot opt in out 源目的地 Chain POSTROUTING (policy ACCEPT 51527 packets, 3091K bytes) pkts bytes target prot opt in out 源目的地 $ iptables -L -v Chain INPUT(策略接受 539K 数据包,108M 字节) pkts bytes target prot opt in out 源目的地 Chain FORWARD(策略接受 0 个数据包,0 字节) pkts bytes target prot opt in out 源目的地 Chain OUTPUT (policy ACCEPT 459K packets, 116M bytes) pkts bytes target prot opt in out 源目的地
我对这个有点好奇,并为你的症状找到了一个很好的解释。它们在nf_conntrack: table full - how the absence of rules can lead to unexpected behavior中有很好的描述。
TL;DR:只要运行
iptables -t nat -vnL
就开始加载nf_conntrack
模块,导致意外的状态防火墙。我还没有亲自验证这一点,你可以打赌我明天在工作中会做对的。解决方案:如果您不需要 NAT,因为无论如何您都在进行桥接,请卸载
nf_conntrack_*
模块和依赖于这些模块的所有其他依赖模块。完全禁用防火墙chkconfig ip[6]tables off
也是一个好主意。如果您不想重启
sudo ufw disable
,可以按照这些说明禁用 Ubuntu 中的防火墙。Xen 必须通过 NAT 连接到您的 domU 服务器,而连接的绝对数量压倒了内核跟踪它们的能力。虽然您可以通过增加 来增加分配给跟踪连接的空间,但使用桥接网络而不是 NAT
nf_conntrack_max
可能会更好。这样,domU 服务器就有了自己的虚拟以太网卡,完全避免了这个问题。