博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iptables的conntrack表满了导致访问网站很慢
阅读量:5820 次
发布时间:2019-06-18

本文共 1064 字,大约阅读时间需要 3 分钟。

  hot3.png

现象:突然发现访问网站很慢,服务器的cpu、内存和磁盘使用率都正常

分析过程及解决方案:查询/var/log/message日志发现有这样的记录“ip_conntrack table full dropping packet”。kernel 用 ip_conntrack 模块来记录 iptables 网络包的状态,并保存到 table 里(这个 table 在内存里),如果网络状况繁忙,比如高连接,高并发连接等会导致逐步占用这个 table 可用空间,一般这个 table 很大不容易占满并且可以自己清理,table 的记录会一直呆在 table 里占用空间直到源 IP 发一个 RST 包,但是如果出现被攻击、错误的网络配置、有问题的路由/路由器、有问题的网卡等情况的时候,就会导致源 IP 发的这个 RST 包收不到,这样就积累在 table 里,越积累越多直到占满,满了以后 iptables 就会丢包,出现外部无法连接服务器的情况。

解决方案:Iptables启动的是会在日志里提示当前的buckets和conntrack_max的值以及每条跟踪连接需要消耗多少内存:

 

解决问题:

方案一:

不要使用iptables,就不会有这种问题,当然那不太安全

方案二:

通过修改hashsize从而修改nf_conntrack_max(内核2.6.19及以前的ip_conntrack_max)

但要注意这个数值并非随意设定,要根据实际内存的情况,原则如下:

HASHSIZE = CONNTRACK_MAX / 8 = RAMSIZE (in bytes) / 131072 = RAMSIZE (in MegaBytes) * 8

内存大小比如2048M,hashsize = 2048*8 =16384,通常我在这个数值进行相对保守的设定,会在这个基础上再乘以0.75,也就是hashsize = 2048*8*0.75 = 12288

centos 6.1 (内核 2.6.19)及以前

echo "options ip_conntrack hashsize=12288" >> /etc/modprobe.conf

centos 6.1 (内核 2.6.19)以后

echo "options nf_conntrack hashsize=12288" >> /etc/modprobe.d/local.conf

然后重启服务器

转载于:https://my.oschina.net/jean/blog/189935

你可能感兴趣的文章
HQL:实用技术
查看>>
.htaccess 的写法
查看>>
Canvas帧数和步长实例
查看>>
关于C语言的问卷调查
查看>>
在windows系统搭建Flutter开发环境
查看>>
MMU (一)
查看>>
(转)AIX中修改主机名 要注意
查看>>
几道搜索题目
查看>>
iphone-common-codes-ccteam源代码 CCNSEnumerator.h
查看>>
C 提示 头文件中 expected initializer before int/void
查看>>
内核中的do while(0)
查看>>
KVC 开发详情
查看>>
MpVue开发之组件引入的问题
查看>>
PLSQL_性能优化系列13_Oracle Index Rebuild索引重建
查看>>
Python语言学习 (六)1.1
查看>>
NSIS 刷新ICO缓存
查看>>
代理模式(Proxy Pattern)
查看>>
poj2229
查看>>
Python单例模式
查看>>
C# GDI+绘图出现内存不足问题
查看>>