我的一个使用Apache + PHP + Mysql的网站没有发布连接。连接数量不断增长。连接状态为睡眠状态。
| 138 | root | localhost | NULL | Sleep | 183 | | NULL |
| 140 | root | localhost:50488 | A | Sleep | 256 | | NULL |
| 142 | root | localhost:50512 | A | Sleep | 253 | | NULL |
| 151 | root | localhost:50668 | A | Sleep | 222 | | NULL |
| 152 | root | localhost:50684 | A | Sleep | 221 | | NULL |
| 155 | root | localhost:50714 | A | Sleep | 214 | | NULL |
| 157 | root | localhost:50751 | A | Sleep | 207 | | NULL |
使用端口50488检查哪个连接到mysql:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 17147 mysql 15u IPv4 150696739 0t0 TCP localhost:mysql->localhost:50488 (ESTABLISHED)
httpd 17487 apache 18u IPv4 150696738 0t0 TCP localhost:50488->localhost:mysql (ESTABLISHED)
因为PHP在脚本自动结束时关闭了连接,所以很荒谬。
任何原因都可能导致此问题?
答案 0 :(得分:3)
您使用持久连接吗?不要使用它。
更多信息:http://www.php.net/manual/en/features.persistent-connections.php
而且,根据我自己的经验,一旦我们遇到了同样的问题,解决方案就是将持久连接更改为正常连接。我不记得细节。这可能是你的情况,或不是。
答案 1 :(得分:2)
问题是由
引起的@ignore_user_abort(TRUE);让剧本永远不会死。
代码中存在错误,连接未关闭。
答案 2 :(得分:0)
在查询结束时添加mysql_close($connection);
...如果您在一个文件中有多个查询,请将其添加到文件的末尾,如下所示:
</body>
</html>
<?php
mysql_close($connection);
?>
* WHERE $connection
是赋予mysql_connect()
的变量
它将关闭连接。