Ubuntu

dmesg 中的 nf_conntrack 投訴

  • October 5, 2012

在調查有關 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 伺服器性能不佳的特定情況”更窄,所以我不提供更多細節。)

附加資訊:

$ unname -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 模組。
經銷商編號: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 bytes target prot opt in out source destination         

鏈輸入(策略接受 9 個數據包,720 字節)
pkts bytes target prot opt in out source destination         

鏈輸出(策略接受 27 個數據包,1780 字節)
pkts bytes target prot opt in out source destination         

Chain POSTROUTING(策略接受 23173 個數據包,1392K 字節)
pkts bytes target prot opt in out source destination

$ iptables -L -v
鏈輸入(策略接受 13976 個數據包,1015K 字節)
pkts bytes target prot opt in out source destination         

Chain FORWARD(策略接受 241K 數據包,24M 字節)
pkts bytes target prot opt in out source destination         

鏈輸出(策略接受 13946 個數據包,1119K 字節)
pkts bytes target prot opt in out source destination

DomU 之一上的 iptables:

$ iptables -L -t nat -v
鏈 PREROUTING(策略接受 53465 個數據包,2825K 字節)
pkts bytes target prot opt in out source destination         

鏈輸入(策略接受 53466 個數據包,2825K 字節)
pkts bytes target prot opt in out source destination         

鏈輸出(策略接受 51527 個數據包,3091K 字節)
pkts bytes target prot opt in out source destination         

Chain POSTROUTING(策略接受 51527 個數據包,3091K 字節)
pkts bytes target prot opt in out source destination

$ iptables -L -v
鏈輸入(策略接受 539K 數據包,108M 字節)
pkts bytes target prot opt in out source destination         

Chain FORWARD(策略接受 0 個數據包,0 個字節)
pkts bytes target prot opt in out source destination         

鏈輸出(策略接受 459K 數據包,116M 字節)
pkts bytes target prot opt in out source destination

我對此有點好奇,並為您的症狀找到了一個很好的解釋。它們在nf_conntrack 中有很好的描述:表已滿 - 缺少規則如何導致意外行為

TL;DR:剛執行iptables -t nat -vnL就開始載入nf_conntrack模組,導致意外的狀態防火牆。我自己還沒有驗證這一點,你可以打賭我明天上班時會做的。

解決方案:如果您不需要 NAT,因為無論如何您都在進行橋接,請解除安裝nf_conntrack_*模組和所有其他依賴於這些模組的依賴模組。完全禁用防火牆chkconfig ip[6]tables off也是一個好主意。

如果您不想重新啟動sudo ufw disable,可以按照這些說明在 Ubuntu 中禁用防火牆。

引用自:https://serverfault.com/questions/432529