TIME_WAIT连接太多

时间:2009-05-02 00:19:22

标签: apache tcp time-wait

我们有一个相当繁忙的网站(每天100万页面浏览量)使用Apache mod代理,在TIME_WAIT状态下不断超载连接(> 1,000)。连接到端口3306(mysql),但mysql只显示一些连接(显示进程列表)并且运行正常。 我们已经尝试改变一堆东西(保持开/关),但似乎没有任何帮助。所有其他系统资源都在合理的范围内。

我已经四处搜索,这似乎表明更改了tcp_time_wait_interval。但这似乎有点激烈。我之前在繁忙的网站上工作过,但从未遇到过这个问题。

有什么建议吗?

3 个答案:

答案 0 :(得分:5)

每个time_wait连接都是已关闭的连接。

您可能正在连接到mysql,发出查询,然后断开连接。对页面上的每个查询重复此操作。考虑使用连接池工具,或者至少使用一个保留数据库连接的全局变量。如果使用全局,则必须关闭页面末尾的连接。希望你有一个共同点,你可以把它,像一个页脚包括。

作为奖励,您应该获得更快的页面加载。 MySQL可以快速连接,但不需要重新连接就更快了。

答案 1 :(得分:1)

如果您的客户端应用程序使用JDBC,您可能会遇到此错误: http://bugs.mysql.com/bug.php?id=56979 我相信php有同样的问题 干杯, 吉勒。

答案 2 :(得分:0)

我们遇到了类似的问题,我们的网络服务器都冻结了,因为我们的php连接到一个mysql服务器,该服务器设置为在传入连接上进行反向主机查找。

当事情进展缓慢时,它运行良好,但在负载下,响应时间从屋顶射出,所有apache服务器都在time_wait中卡住了。

我们解决问题的方法是使用xdebug在高负载下创建脚本的分析数据,并查看它。 mysql_connect调用占用了80-90%的执行时间。