我正在运行一个由PHP / MySQL驱动的Web服务,最近发现了一个奇怪的问题。
当我运行“show full processlist;”时通过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()来解决这个问题吗?
感谢您的建议。
答案 0 :(得分:2)
由于在脚本末尾没有使用mysql_close(),这些“睡眠”连接是否会发生?
没有。无论如何,MySQL连接在脚本末尾都会关闭,除非它们是持久的。
这些休眠连接意味着您要么使用持久连接,要么在某个地方出现问题导致MySQL连接长时间保持打开状态,这可能是因为PHP脚本运行的时间很长,或者是其他原因。
如果您不知道是否需要持久连接,最好将其关闭。与流行的建议相反,在很多情况下,他们实际上可能会产生比他们解决的问题更多的问题,例如导致您更快地耗尽资源。但是,在某些特定情况下需要它们,但是您需要知道自己在做什么,不知道自己在做什么,以避免可能会打开并让数百个连接长时间处于睡眠状态的情况等等。
答案 1 :(得分:0)
您使用的是持久连接(mysql_pconnect())吗?如果配置不当,他们就有这种无限期留守的习惯。
答案 2 :(得分:0)
将wait_timeout
和interactive_timeout
变量更改为小值
可能会在centos中的my.cnf文件中更改