可以安全地增加 ip_conntrack_max 吗?

可以安全地增加 ip_conntrack_max 吗?

我经常在我的日志中看到以下内容:

内核:ip_conntrack:表已满,丢弃数据包。

目前,我已将 ip_conntrack_max 设置为 65536(默认,RHEL5)。

考虑到内存使用情况,我可以安全地将此值增加多少?这台机器上有 4GB 内存。这台机器的功能之一是作为静态内容服务器,这可能解释了高连接数,也意味着我想尽可能多地保留用于缓存的操作系统内存。

另外,以下两个有什么区别? /proc/sys/net/ipv4/netfilter/ip_conntrack_max /proc/sys/net/ipv4/ip_conntrack_max

我应该编辑哪一个?

谢谢!

答案1

首先,问自己一个问题:您的设置是否需要连接跟踪?如果它只是一台服务器,而防火墙/NAT是在其他地方完成的,那么您可能可以完全禁用conntrack。

其次,检查您的 conntrack 条目是否有意义。有时,由于某些网络或防火墙配置错误,conntrack 表中会充满垃圾信息。通常这些条目是从未完全建立的连接。例如,当服务器收到传入的连接 SYN 数据包时,可能会发生这种情况,但服务器回复总是在网络上的某个地方丢失。

我唯一收到“ip_conntrack:表已满”消息并且需要增加 ip_conntrack_max(而不是修复配置)的机器是路由器为相当大的网络(数千个端点)进行 NAT。

如果您知道需要 conntrack,并且确实需要比现在更大的数量,请增加该数字,直到不再收到“表已满”消息。并观察内存使用情况。

在 /proc/slabinfo 文件可以找到有关 conntrack 对象内存分配的一些统计信息。

答案2

带有“netfilter”的路径是引用相同设置的老方法。您可以编辑任一文件。

# 猫/proc/sys/net/ipv4/ip_conntrack_max  
655360
# 猫/proc/sys/net/ipv4/netfilter/ip_conntrack_max
655360
# echo 655361 > /proc/sys/net/ipv4/ip_conntrack_max
# 猫/proc/sys/net/ipv4/netfilter/ip_conntrack_max
655361

相关内容