我经常在我的日志中看到以下内容:
内核: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