请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
搜索

本文来自

安全运维工具

安全运维工具

人已关注

请添加对本版块的简短描述

精选帖子

阿里云CDN计费
阿里云CDN计费
0阅读|170人阅读
信用卡空当接龙
信用卡空当接龙
0阅读|284人阅读
HTTP/1.0和HTTP/1.1、HTTP/2请求对比
HTTP/1.0和HTTP/1.1、HTTP/2请求对比
3阅读|665人阅读
Kubernetes 多集群管理平台 Wayne
Kubernetes 多集群管理平台 Wayne
0阅读|698人阅读

ip_conntrack: falling back to vmalloc解决办法

[复制链接]
300 abc 发表于 7 天前
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

https://www.iteye.com/blog/zhangxugg-163-com-1187429



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表