MySQL连接未关闭

Posted

技术标签:

【中文标题】MySQL连接未关闭【英文标题】:MySQL connections not closing 【发布时间】:2014-12-18 07:59:42 【问题描述】:

我有一个在连接到 mysql 5.5 的 Tomcat7 上运行的 Web 应用程序。

我有两台服务器运行相同的代码:

Ubuntu

红帽

Ubuntu 运行良好,保持稳定的 8-16 个连接,但 Red Hat 泄漏连接并且连接数增加,从未下降。服务器最终会重置 ~152 个连接。

关闭连接的代码被调用:

try 
    conn.close();           
 catch (SQLException e) 
    exceptionController.logException(this.getClass().getSimpleName(), "finalize Db", e.getMessage(), false);
finally
    conn = null;

所有到 MySQL 的连接都来自这个应用程序。

为什么会有不同的行为? 是否有我应该考虑的配置设置 - 例如关闭睡眠连接设置

Ubuntu 服务器状态:

红帽服务器状态:

连接列表的部分屏幕:

我发现了这个post,它似乎降低了 o/s 连接速度,但它们仍在慢慢上升。

编辑

研究表明连接未正确关闭。为什么连接会在一种环境中关闭,而在另一种环境中却没有?

我使用以下设置编辑了my.cnf

wait_timeout=30

但是,客户端连接正在休眠并且永远不会被终止。服务器已使用新设置重新启动。

我不明白什么?

【问题讨论】:

show full processlist 显示什么 @exussum - 你能解释一下吗?你的意思是客户端连接列表?如果是这样,所有连接都来自两台服务器上的网络应用程序。 它将显示建立连接的原因以及它们上发生的情况。在 mysql 中运行它 @exussum 他们在睡觉。 @meda 是的 - 真的很酷 - 可以在服务器状态下找到。 【参考方案1】:

我找到了解决方案。 XP on SO Database Administrators。

RedHat 有自己的 mysql 文件夹:

[root@localhost ~]# locate my.cnf
/etc/my.cnf
/opt/rh/mysql55/root/etc/my.cnf

这是一个配置问题,我的配置文件没有被使用!

【讨论】:

以上是关于MySQL连接未关闭的主要内容,如果未能解决你的问题,请参考以下文章

Java MySQL连接未关闭

MySQL 和 JDBC 连接池:未关闭的语句

WinForm程序中使用 .net MySql 连接器,主窗体未关闭时, MySql 连接没有释放。

记一次排查mysql数据库连接未关闭问题的过程

mysql工作台未与mac上的localhost连接,无法连接到'127.0.0.1(49)上的MySQL服务器[关闭]

MySQL超时配置