kernel.log中的消息是什么:
nf_conntrack_alloc: Can't alloc conntrack
net / netfilter / nf_conntrack_core.c中的kmem_cache_alloc nf_conntrack_alloc()返回NULL。 内核无法分配内存。
检查免费memore(猫/ proc / meminfo和slabtop)。
nf_conntrack_alloc被分解为:
nf – NetFilter – 通常通过iptables用户空间工具访问基于内核的IP过滤 conntrack – 使用conntrack_tools连接跟踪或stream量分析 alloc – 请求“分配”内存中的空间,在这种情况下跟踪连接 – 相反是dealloc Cannot alloc conntrack分配Cannot alloc conntrack意味着尝试分配内存来跟踪新的networking连接失败。 连接可能意味着比TCP连接更多。 ICMP,SIP和UDP都可以算上你的极限。 2006年6月号的login定义了这样的连接跟踪:
基本上,连接跟踪系统将关于连接状态的信息存储在包含源和目标IP地址,端口号对,协议types,状态和超时的存储器结构中。 有了这些额外的信息,我们可以定义更多的智能过滤策略。
每个新的连接都会进入一个连接跟踪表,该连接跟踪表的入口数量是有限的。 如果连接表填满,最旧的条目将被丢弃。 这意味着如果build立了太多的连接,旧连接可能会突然中断。
有一个名为nf_conntrack_max的系统可调nf_conntrack_max ,默认为32767,如果我正确读了。 你可以调整到更大的数字,如65535根据此页在这里在serverfault.com 。 ( sysctl -w net.netfilter.nf_conntrack_max=65535 )请参阅/proc/sys/net/netfilter中的值列表。
也就是说, Paul Roberts的一篇文章指出,如果表格真的被填满了,你应该看到nf_conntrack: table full, dropping packet的消息。 所以,如果这样的话,你实际上可能会有一个系统为其他事物分配了太多的内存,并且连接跟踪感觉是短缺的首当其冲。 考虑closures服务或增加内存。 如果你在有限的内存情况下,你可能需要看看符号剥离和其他技巧,以获得更多的内存。