【问题标题】:The connection to Mysql not closing与 Mysql 的连接未关闭
【发布时间】:2012-02-09 02:59:27
【问题描述】:

我的一个使用 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自动关闭连接,这很荒谬。

任何原因都可能导致此问题?

【问题讨论】:

  • 可能是您的某些页面运行速度非常慢,这意味着连接已建立并且页面顶部,随后页面仍在等待其他资源响应,然后mysql连接仍然处于活动状态(这解释了为什么连接处于睡眠状态)
  • @ajreal 我可以确认页面已成功结束。并且连接的状态是睡眠

标签: php mysql apache


【解决方案1】:

您是否使用持久连接?不要使用它。

更多信息:http://www.php.net/manual/en/features.persistent-connections.php

而且,根据我自己的经验,一旦我们遇到了同样的问题,解决方案就是将持久连接更改为正常连接。我不记得细节了。这可能是你的情况,也可能不是。

【讨论】:

    【解决方案2】:

    问题是由

    引起的
    1. @ignore_user_abort(TRUE);让脚本永不消亡。

    2. 代码出错,连接未关闭。

    【讨论】:

    • 这不是一个很有帮助的答案。请解释“@ignore_user_abort(TRUE)”。这是什么,这是在哪里,是什么意思?
    【解决方案3】:

    在查询末尾添加mysql_close($connection);...如果您在一个文件中有多个查询,请仅将其添加到文件末尾,如下所示:

    </body>
    </html>
    <?php
        mysql_close($connection);
    ?>
    

    *WHERE $connection 是给 mysql_connect() 的变量

    它将关闭连接。

    【讨论】:

    • 理论上这会关闭连接,但如果没有呢?
    猜你喜欢
    • 2021-04-14
    • 2014-12-18
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2021-04-11
    • 2014-08-17
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多