华为云服务器Web访问超时系统日志打印:nf_conntrack:table full, dropping packet_云淘科技
问题现象
客户端访问web时出现time out。 服务端系统日志/var/log/messages打印kernel: nf_conntrack:table full, dropping packet。
图1 系统日志
适用场景
本节操作适用于CentOS系统,且系统开启了主机防火墙,其他Linux系统可能存在差异。
约束与限制
本节操作涉及修改系统内核参数,在线修改内核参数会出现内核不稳定,建议修改后在合理的时间重启系统,请评估风险后操作。
根因分析
iptables的connection-tracking模块使用系统内存的一部分来跟踪表中的连接。“table full, dropping packet”表明连接跟踪表已满,不能为新连接创建新的条目,因为没有更多的空间。因此出现“dropping packet”问题。
解决方案是增加连接跟踪条目的数量。
CentOS 6系列操作系统处理方法
执行以下命令,查看nf_conntrack_max参数。
# sysctl net.netfilter.nf_conntrack_max
检查当前正在跟踪的连接数。
# cat /proc/sys/net/netfilter/nf_conntrack_count
如果该值达到nf_conntrack_max值则会出现包被丢弃的现象。
提高net.netfilter.nf_conntrack_max值(以内存为64G,net.netfilter.nf_conntrack_max值2097152为例)。
执行以下命令,使配置即时生效。
# sysctl -w net.netfilter.nf_conntrack_max=2097152
执行以下命令确保重启后配置仍然生效。
# echo “net.netfilter.nf_conntrack_max = 2097152” >> /etc/sysctl.conf
.net.netfilter.nf_conntrack_max不是越高越好,通常根据内存大小进行设置。
nf_conntrack_max计算公式(64位)
CONNTRACK_MAX = RAMSIZE (inbytes)/16384/2
例如你的机器是一个64GB 64bit的系统,那么最合适的值是
CONNTRACK_MAX = 64*1024*1024*1024/16384/2 = 2097152
如果conntrack表中的条目数量显著增加(例如以4倍的速度增加),则还应增加存储conntrack条目的哈希表的大小以提高效率。
计算新的哈希值:在CentOS 6及以上版本,计算公式是hashsize = conntrack_max/4
执行以下命令,设置新的哈希大小。
# echo “options nf_conntrack expect_hashsize=524288 hashsize=524288” >/etc/modprobe.conf
重启iptables。
# service iptables restart
CentOS 7系列操作系统处理方法
执行以下命令,在/etc/modprobe.d/firewalld-sysctls.conf中设置conntrack条目的哈希值。
在CentOS 6及以上版本,计算公式是hashsize = conntrack_max/4
# echo “options nf_conntrack expect_hashsize=131072 hashsize=131072” >> /etc/modprobe.d/firewalld-sysctls.conf
重启firewalld。
# systemctl restart firewalld
确认参数修改成功。
# sysctl -a |grep nf_conntrack_max
了解更多请参考Red Hat Customer Portal。
父主题: 操作系统类(Linux)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家