【问题标题】:PHP, MySQL and "sleeping" connectionsPHP、MySQL 和“休眠”连接
【发布时间】:2013-12-03 05:40:09
【问题描述】:

我正在运行一个由 PHP/MySQL 提供支持的 Web 服务,最近发现了一个奇怪的问题。

当我运行“显示完整进程列表;”时通过 SSH 终端的 SQL 命令,我注意到几个“休眠”连接:

| Id        | User    | Host      | db      | Command | Time | State | Info                  |
+-----------+---------+-----------+---------+---------+------+-------+-----------------------+
| 218121282 | test_user | localhost | test_db | Sleep   |    0 | NULL  | NULL                  |

这些“休眠”连接是否因为在脚本末尾没有使用 mysql_close() 而发生?

如果是这个原因,我可以通过使用“register_shutdown_function”PHP函数并在回调函数上运行mysql_close()来解决这个问题吗?

感谢您的建议。

【问题讨论】:

  • “这些“休眠”连接是否因为在脚本末尾没有使用 mysql_close() 而发生?不会。对于非持久连接,这是自动完成的。

标签: php mysql


【解决方案1】:

这些“休眠”连接是否因为在脚本末尾没有使用 mysql_close() 而发生?

没有。无论如何,MySQL 连接都会在脚本结束时关闭,除非它们是持久的。

这些休眠连接意味着您要么正在使用持久连接,要么存在某个问题导致 MySQL 连接长时间保持打开状态,要么是因为 PHP 脚本运行时间过长,要么是其他原因。

如果您不知道是否需要持久连接,最好关闭它们。与流行的建议相反,在很多情况下,它们实际上可能会产生比解决方案更多的问题,例如导致您更快地耗尽资源。但是,在某些特定情况下需要它们,但是您需要知道自己在做什么以及不应该对它们做什么,以避免您可能会打开并让数百个连接长时间休眠的情况等。

【讨论】:

  • 您好,感谢您的回答,我的代码不使用持久连接。一旦脚本结束,MySQL连接是否有可能在一段时间后自动关闭。有可能吗?
【解决方案2】:

您是否在使用持久连接( mysql_pconnect() )?如果配置不正确,他们会有这种无限期停留的习惯。

【讨论】:

  • 嗨,不,我没有在我的代码的任何地方使用 mysql_pconnect()。还有什么建议吗?谢谢。
【解决方案3】:

wait_timeoutinteractive_timeout 变量更改为较小的值

可能在 centos 中的 my.cnf 文件中更改

【讨论】:

    猜你喜欢
    • 2013-04-20
    • 1970-01-01
    • 2012-05-28
    • 2014-10-03
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多