Jun
19
Too many connectionsConnection closed by foreign host 解决方法
今日在服务器的mysql出现了”Too many connectionsConnection closed by foreign host “错误。这个错误之前在测试机也出现过,当时没有留意,只是将测试机中的web服务器定时重启,以解决该问题。而今日出现的在外网的服务器,不能如些操作。可惜在baidu上根据没有找到有用的资料。都是一些小白写的文章。
后来经朋友分析,可能是iptables引起。由于linux下的iptables都是使用ip_conntrack进行跟踪,所有的进出数据包都会记录在连接跟踪表中,包括tcp,udp,icmp等,一旦连接跟踪表被填满以后,就会发生丢包,导致网络不稳定。
而我这一次刚好是由于昨天晚上增加了新的iptables条件,在大量访问下,出现了掉包的情况。引起mysql错误,而最后mysql由于没有获取到正确的连接,而完全没有占用cpu.
解决方法:
首先需要先加载ip_conntrack 模块,再通过以下接口进行调整,例如:
如果需要支持655360条跟踪记录的话,只需要将hash bucket设置为81920即可:
或者添加到 /etc/modprobe.conf 配置文件中:
通过这种方式就可以做到在ip_conntrack模块被加载时就设置好连接跟踪表的大小。
参考:http://bkeep.blog.163.com/blog/static/12341429020120303114594/
后来经朋友分析,可能是iptables引起。由于linux下的iptables都是使用ip_conntrack进行跟踪,所有的进出数据包都会记录在连接跟踪表中,包括tcp,udp,icmp等,一旦连接跟踪表被填满以后,就会发生丢包,导致网络不稳定。
而我这一次刚好是由于昨天晚上增加了新的iptables条件,在大量访问下,出现了掉包的情况。引起mysql错误,而最后mysql由于没有获取到正确的连接,而完全没有占用cpu.
解决方法:
首先需要先加载ip_conntrack 模块,再通过以下接口进行调整,例如:
引用
modprobe ip_conntrack
sysctl –w net.ipv4.netfilter.ip_conntrack_max = 655360
sysctl –w net.ipv4.netfilter.ip_conntrack_max = 655360
如果需要支持655360条跟踪记录的话,只需要将hash bucket设置为81920即可:
引用
modprobe ip_conntrack hashsize=81920
或者添加到 /etc/modprobe.conf 配置文件中:
引用
options ip_conntrack hashsize=81920
通过这种方式就可以做到在ip_conntrack模块被加载时就设置好连接跟踪表的大小。
参考:http://bkeep.blog.163.com/blog/static/12341429020120303114594/
史咸匹妾
September 17, 2013 10:46
不是很明白啊。
分页: 1/1 1