如何关闭未关闭的mysql连接?

问题描述:

我的托管服务提供商的客户端因为太多未关闭的mysql连接而阻塞了该站点。 该网站以前由某人创建,目前我正在维护它。如何关闭未关闭的mysql连接?

我在页面的末尾添加了mysql_close函数。它正在关闭连接,但仍然有一些连接未关闭。我可能留下了一些地方..

我需要的是关闭在使用cron的文件或一些东西服务器未关闭MySQL连接..

我有什么做的?

是否可以一次关闭所有连接?如果是这样,怎么样?

+0

你可以尝试使用'mysql_pconnect',它具有副作用,虽然如http://*.com/questions/1340859/which-is-better-mysql-connect-or-mysql-pconnect – konsolenfreddy 2011-06-12 07:43:45

+0

如何关闭在mysql_pconnect中打开的连接让试试看吧.. – Jagadeesan 2011-06-12 07:52:12

您是否使用持续连接?如果不是,那么你真的不应该太担心关闭你的连接。从manual

使用mysql_close()通常没有必要 ,作为非持久性开放 链接在脚本执行的 结束自动关闭。见 也释放资源。

而不是太多未关闭的连接,它不是(它本质上是相同的),你有太多的开放连接?例如,您的网站上一次使用的用户太多?

如果您有持久连接,千万不要忘记:

mysql_close()不会关闭()由 mysql_pconnect创建 持久连接。

正如在评论中所说的那样,在脚本末尾不会释放一个mysql_connect()资源。从另一个manual page

释放资源

由于与PHP 4的Zend的 引擎,没有更多的 引用它的资源推出的引用计数 系统会自动检测 ,它是被 垃圾收集器释放。由于这个原因,它很少需要手动释放内存 。

注意:持久数据库链接是此规则的一个例外 。它们不是由垃圾收集器销毁的 。 有关更多信息,请参阅持续连接部分 。

可能会有然而阿里纳斯,从评论上mysql_close page

至少在PHP5.3.2和Windows 通过TCP连接,你应该总是 使用这种mysql_close()函数来 关闭并释放由PHP使用的 的tcp套接字。 脚本执行后的垃圾回收不会自行关闭 tcp套接字。否则,插座 将保持“等待”状态 大约30秒,并且任何 附加页面加载/连接 尝试将仅添加到总共 开放tcp连接的数量。此 等待时间似乎不是 可通过PHP设置进行配置。

+0

连接似乎只用mysql_connect()打开..如何关闭打开即使在mysql_pconnect中也试试.. – Jagadeesan 2011-06-12 07:48:01

+1

但是可以肯定的是:你不需要关闭每一个连接在文件的末尾:它将在那里自动关闭。如果你想半途而废,只需要关闭它就可以释放资源。不要浪费时间和努力为所有脚本添加'mysql_close':D。如果你不使用'pconnect',你不必担心关闭那些课程 – Nanne 2011-06-12 07:51:22

+0

不,它不是自己关闭的: – Jagadeesan 2011-06-12 08:01:46

如果你得到一些未关闭的连接,你可能会错过某些页面,或者通过包含等,或者调用“退出”函数,所以你不会达到你的密码。

我不相信你可以使用cron从mysql启动其他连接。

mysql_connect将返回实际连接的标识符,您可以在mysql_close调用中使用该标识符。

$conn1 = mysql_connect(.....); 
mysql_close($conn1); 

如果页面本身打开多个连接,则需要使用标识符,否则mysql_close()只会关闭最后打开的连接。

但正如Nanne所言,PHP通常会在页面执行后自行清理连接,所以问题是如果不关闭它们,或者如果同时打开太多连接。通常,每个请求只需要1个连接,除非您同时打开并遍历多个结果集。