falling back to vmalloc
原因是,ip_conntrack的hashsize设置过大,导致内存分配错误引起。
经过反复尝试,哈希表大小设置为 262144,是比较合理的值,一方面能避免因ip_conntrack哈希表过小(RHEL 默认为8192)导致防火墙丢包( ip_conntrack: table full, dropping packet. ),另一方面也会消除掉 falling back to vmalloc错误。
我之前写过一篇文章,描述如何修改ip_conntrack模块的hashsiz以避免iptables丢包,修改hashsize有两种方法:
1. 一是向/etc/modprobe.conf中增加
options ip_conntrack hashsize=262144
再执行service iptables restart即可生效,可使用sysctl -a|grep ip_conntrack_buckets即可检查是否确实修改成功
2. 二是修改/boot/grub/grub.conf文件,向kernel行末尾增加ip_conntrack.hashsize=262144,再重启机器即可。
以上方法只可用其中之一(不能两者同时使用,否则会导致启动时报内核异常错误),强烈建议使用第一种方法,因为它不用重启机器。
由于我知识面的局限,之前使用第二种方式。实在对大家是一个误导。
将hash表大小设置为262144,不幸的是,又有新的问题产生:重启iptables时,系统日志中出现ip_conntrack: falling back to vmalloc。
冥思苦想而不得解,后尝试着将hashsize减少一半,即262144,这个问题竟然得以解决。那我的理解就是hash表设置过大,导致内存分配有误造成。总结一个,完整解决方案如下:
向/etc/modprobe.conf中增加
options ip_conntrack hashsize=262144
再执行
service iptables restart
验证
sysctl -a|grep ip_conntrack_buckets
再查看iptables跟踪条目数:
sysctl -a|grep conntrack_max
输出:
net.ipv4.ip_conntrack_max = 4194304
net.ipv4.netfilter.ip_conntrack_max = 4194304
设置跟踪连接数目,自动调整为哈希表大小的8倍, 所以不要在/etc/sysctl.conf中设置以下两项的值:
net.ipv4.netfilter.ip_conntrack_max net.ipv4.ip_conntrack_max
分享到:
相关推荐
六本CHM电子书: 1 vckb.chm -- 2 vckb2 - book.chm -- 3 vckb3.chm -- 4 vckb6.chm -- 5 vckb7.chm -- 相当于小型MSDN了 6 vckbase5.chm -- ...我还看不懂,你们看得懂就下下来看看,谢谢。...
conntrack将信息存在内存结构中,包括IP,端口,协议类型,状态以及超时时间。 而且conntrack不仅可以对TCP这种有状态的会话进行状态跟踪,还可以对UDP进行状态跟踪。 conntrack本身并不会对包进行过滤,而是...
离线安装包,亲测可用
官方离线安装包,亲测可用
<*> "conntrack" connection tracking match support <*> "state" match support < > IP virtual server support ---> 修改为: <*> IP virtual server support ---> [ ] Netfilter connection tracking (NEW) ...
RRQ and WRQ works the same way for Linux v2.13.6.
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
标题中的“nf_conntrack_proto_udp.rar_out”暗示了一个与网络连接跟踪(Netfilter Connection Tracking,简称NFCT)相关的主题,特别是涉及UDP(User Datagram Protocol)协议的子部分。这个名称可能对应于一个软件...
int ip_conntrack_helper_register(struct ip_conntrack_helper *me) { BUG_ON(me->timeout == 0); WRITE_LOCK(&ip_conntrack_lock); list_prepend(&helpers, me); WRITE_UNLOCK(&ip_conntrack_lock); return 0...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,亲测可用
标题中的"nf_conntrack_tuple_common.rar_The Common"暗示了我们正在探讨的是网络连接跟踪(Netfilter Connection Tracking,简称NF Conntrack)中的元组(tuple)通用部分。NF Conntrack是Linux内核的一个核心组件...
- **Nat helper**:负责根据数据包的内容(如源地址、目的地址、端口和协议等),查找 ip_conntrack 数组中的相关信息,并按照 ALG 的要求修改数据包,从而解决 NAT 引发的问题。 例如,在 `linux/...
# 载入相关模块 ...modprobe ip_conntrack > /dev/null 2>&1 modprobe ip_conntrack_ftp > /dev/null 2>&1 modprobe ip_conntrack_irc > /dev/null 2>&1 modprobe ipt_MASQUERADE > /dev/null 2>&1
它调用`ip_ct_get()`函数来查找或创建连接记录,并调用`ip_conntrack_reass()`函数来重新组装分片的数据包。这个过程对于确保正确地处理分片数据包至关重要。 ##### 4.2 ip_conntrack_in() 此函数处理进入系统的...
IPv4 support for nf_conntrack.
解决这个问题的方法通常涉及调整iptables的conntrack参数。首先,可以通过增大`ip_conntrack_max`参数来增加conntrack表的最大连接数。例如,在`/etc/sysctl.conf`文件中设置`net.ipv4.ip_conntrack_max = 1048576`...