一台访问量较高的服务器出现严重的丢包和无法建立链接的情况,已经确认数据中心网络没有问题,怀疑服务器自身出现问题。
进入服务器发现网卡并没有error,内部运行的web服务均正常,但是仍然会出现断流和丢包现象,初步怀疑是在系统方面。
一、执行demsg
发现大量“VE0: nf_conntrack: table full, dropping packet.”的错误提示,确定是ip_conntrack跟踪连接满导致网络丢包问题。
二、统计表的情况
cat /proc/net/nf_conntrack | wc -l
默认max=65536。可以先重启iptables 恢复正常连接,然后修改参数
三、修改syctl参数
vi /etc/sysctl.conf
net.nf_conntrack_max = 655360 #加十倍,根据自身服务器内存进行修改
net.netfilter.nf_conntrack_tcp_timeout_established = 1200 #设置timeout时间sysctl -p /etc/sysctl.conf
四、另外参考
#加大 ip_conntrack_max 值 net.ipv4.ip_conntrack_max = 393216
net.ipv4.netfilter.ip_conntrack_max = 393216
#降低 ip_conntrack timeout时间
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
增加完以上内容后,通过sysctl -p 使配置生效 。不过该方法缺点:一是重启iptables后,ip_conntrack_max值又会变成65535默认值,需要重新sysctl -p
参考文献:
http://blog.51cto.com/ixdba/1737642
https://blog.csdn.net/yanggd1987/article/details/54924725