【问题标题】:Many Threads_connected mysql with PHP许多Threads_connected mysql与PHP
【发布时间】:2015-03-12 17:52:47
【问题描述】:

我正在修复一个使用 PHP 5.4 和 mySQL 的 Web 应用程序。

有时 mySQL 会显示错误“连接太多”,我已阅读过有关此错误的信息,并且我知道在使用后关闭连接很重要。 在所有数据库操作之后,我正在调用 mysql_close(),显然是正确的。

这个应用程序被许多不同的人在许多机器上使用,所以可能太多的连接是“正常的”,我所要做的就是增加 max_connections 变量。

我的疑问是,当我执行show status like '%onn%' 时,结果是

Threads_connected 正确吗? 它们在 mysql_close() 调用后继续。我的 max_connections 限制是 151,什么意思,连接了 151 个线程?线程连接和“连接过多错误”之间的关系如何。 我如何关闭这些线程?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您的客户是什么?他们有什么限制?例如,如果您使用 Apache 并将 MaxClients 设置为 200,那么您很容易超过 151。

    线程完成速度慢吗?如果是这样,让我们​​看看慢查询并加快它们的速度,以便它们可以更快地释放连接。

    编辑

    Threads_runningThreads_connected 更受关注。前者实际上是在做某事;后者包括Sleep 模式下的线程,如SHOW PROCESSLIST 所示。

    【讨论】:

    • 我有很多客户端,是的,但我想要一种客户端不保持连接的方式,你在图像中看到连接了 57 个线程,我想要 0。是真的,当Threads_connected到达151时,会抛出“too many connections”错误?
    • 可能是 Web 服务器在 mysql_close() 之后仍然挂在它们上面。这称为“持久连接”。因此,我对 Apache 的评论。在另一个主题上,不推荐使用 mysql_* 接口;你应该切换到 mysqli_*。
    • 好的,但是因为存在很多thread_connected,所以发生了太多的连接错误,对吧?可以关闭这些线程吗?
    • 是的。我们需要找出为什么clients 成群结队地连接而无法断开连接。你们是什么客户?
    • 这是一个简单的 PHP 应用程序,由多台机器连接,大约 20-70 台机器。但大多数时候,每个应用程序都不需要mysql连接。在我看来,threads_connected 必须同时连接 2 或 3 个。
    猜你喜欢
    • 1970-01-01
    • 2010-09-22
    • 2015-09-16
    • 1970-01-01
    • 2015-03-23
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多