错误:无法分配 conntrack

错误:无法分配 conntrack

kernel.log 中的消息是什么意思:

nf_conntrack_alloc: Can't alloc conntrack

答案1

net/netfilter/nf_conntrack_core.c 中的 kmem_cache_alloc nf_conntrack_alloc() 返回 NULL。内核无法分配内存。

检查免费的memore(cat /proc/meminfo和slabtop)。

答案2

nf_conntrack_alloc分解为:

  • nf-网络过滤- 基于内核的 IP 过滤通常通过iptables用户空间工具
  • conntrack- 使用以下工具进行连接跟踪或流量分析conntrack_tools
  • alloc- 请求“分配”内存空间,在本例中是为了跟踪连接 - 相反的是dealloc

Cannot alloc conntrack表示尝试分配内存以跟踪新网络连接失败。连接可能远不止 TCP 连接。ICMP、SIP 和 UDP 都可计入您的限制。2006 年 6 月刊 ;login定义连接跟踪如下:

基本上,连接跟踪系统将有关连接状态的信息存储在一个内存结构中,该结构包含源和目标 IP 地址、端口号对、协议类型、状态和超时。有了这些额外的信息,我们可以定义更智能的过滤策略。

每个新连接都会进入一个连接跟踪表,该表的条目数量有限。如果该连接表已满,则最旧的条目将被删除。这意味着如果建立了太多连接,旧连接可能会突然断开。

nf_conntrack_max如果我没看错的话,有一个系统可调参数,默认为 32767。您可以将其调整为更大的数字,例如 65535serverfault.com 上的这个页面.(sysctl -w net.netfilter.nf_conntrack_max=65535)请参阅中的价值观列表/proc/sys/net/netfilter

这就是说,保罗·罗伯茨 (Paul Roberts) 的文章表示如果表确实已填满,则应该看到消息nf_conntrack: table full, dropping packet。因此,考虑到这一点,您的系统可能确实为其他事情分配了过多的内存,而连接跟踪则首当其冲地感受到了短缺的影响。考虑关闭服务或增加 RAM。如果您处于内存有限的情况,您可能需要查看符号剥离和其他技巧来获得更多可用内存。

相关内容