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) ...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
# 载入相关模块 ...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
IPv4 support for nf_conntrack.
ConnView是conntrack表查看器。 这是php脚本-ip_conntrack表的前端。 您可以选择过滤,连接排序。 脚本可识别conntrack表中的常见服务。您可以查看连接列表或每个IP的详细信息列表等。
This is a module which is used for setting up fake conntracks on packets so that they are not seen by the conntrack/NAT code for linux.
bool generic pkt to tuple for Linux v2.13.6.
you can redistribute it and or modify it under the terms of the GNU General Public License version 2.
Deleting the dummy variable which kicks off garbage collection.
Print out the per-protocol part of the tuple.
Print out the per-protocol part of the tuple.