【发布时间】:2014-07-09 13:14:25
【问题描述】:
我正在编写一个庞大的 MySQLi/PHP 应用程序,但我的数据库遇到问题,运行几个小时后似乎打开了太多连接 (250)。
我在我的网络中使用了一个非常快速的外部数据库服务器。我每秒大约处理 1000 个问题,但服务器似乎没有留下深刻印象(负载接近 0)。
在我的应用程序中,MySQLi 链接被数据库类的析构函数关闭(这似乎工作正常)。
我正在使用准备好的语句,并且还有几个守护进程运行无限 while 循环和其中的一些查询(循环被 usleep() 延迟以防止过度使用,我必须注意到 mysqli_connect() 只被调用一旦启动守护进程)。
但似乎我从来没有用stmt->close() 结束我准备好的陈述。在我的数据库中的查询统计信息下,我可以看到stmt->close() 问题的数量等于stmt->execute() 的数量。那么这可能是问题吗?例如,我什么时候必须关闭我的 stmt?我不知道在哪里可以找到这个问题的解决方案。
软件版本
CentOS 6.5 下的 PHP 5.5 和 MySQL 5.6
【问题讨论】:
-
我在 PHP PDO 方面没有很多经验,但这可能会有所帮助:stackoverflow.com/questions/5685879/…
-
什么平台?什么网络服务器软件?什么版本的php?
-
@oliakaoil 我不使用 PDO,我使用 PHP MySQLi。但我会阅读你的建议。
-
问题是带有 usleep 的脚本执行多长时间。如果它们运行 30 分钟,而您一次调用它们太多,它们可以使用许多连接。另一个问题是您网站上的流量是多少,以及“连接太多”是否以某种方式与用户操作(许多用户访问您的网站)或您所谓的守护进程有关。我认为问题出在你的守护进程上——你启动它们,可能永远不会完成你之前启动的那些,所以一段时间后你达到最大连接限制
-
@OllieJones PHP 5.5 under CentOS 6.5 with MySQL 5.6