一台高并发的宿服务器出现莫名其妙的断网问题,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
问题解决。