net.netfilter.nf_conntrack_max 太小导致丢包

分类:笔记 1.3k浏览

一台高并发的宿服务器出现莫名其妙的断网问题,reboot重启后一段时间正常,在断网过程通过IPMI登陆,对外ping时提示

ping:sendmsg:不允许操作(有时)

同时偶尔能连通。但问题是TCP(比如SSH)一旦建立后,却不会断线,说明物理层是没问题的。

通过dmesg查看有大量的nf_conntrack:table full,dropping packet ,所以找到了问题。

原因:

CentOS 默认预设net.netfilter.nf_conntrack_max参数太小导致丢包。

解决方法:

一、增加参数

 vi /etc/sysctl.conf

net.netfilter.nf_conntrack_max=8388608
net.netfilter.nf_conntrack_tcp_timeout_close_wait=60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=60
net.netfilter.nf_conntrack_tcp_timeout_time_wait=60

(具体加多少根据系统性能或硬件参数而定,搜索下有算法)

二、生效

sysctl -p

问题解决。