java - 如何减轻连接 com.mysql.jdbc.JDBC4Connection@11d08960 触发的连接泄漏,

标签 java mysql jdbc memory-leaks hikaricp

我有一个 mqtt 客户端获取订阅主题的请求, 然后我把它交给固定大小 50 的线程池。 我将 hikaricp 2.4.2 用于 DB Pooling MySQL 数据库。

我目前使用的是 2.4.2,这是我的设置

    HikariConfig config = new HikariConfig();
    config.setDataSourceClassName(CLASS_FOR_NAME);
    config.setJdbcUrl(HOST);
    config.setUsername(USER);
    config.setPassword(PASS);
    config.addDataSourceProperty("cachePrepStmts", "true");
    config.addDataSourceProperty("prepStmtCacheSize", "250");
    config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
    config.setLeakDetectionThreshold(TimeUnit.SECONDS.toMillis(30));
    config.setValidationTimeout(TimeUnit.MINUTES.toMillis(1));
    config.setMaximumPoolSize(10);
    config.setMinimumIdle(0);
    config.setMaxLifetime(TimeUnit.MINUTES.toMillis(2)); // 120 seconds 
    config.setIdleTimeout(TimeUnit.MINUTES.toMillis(1)); // minutes
    config.setConnectionTimeout(TimeUnit.MINUTES.toMillis(5)); 
    config.setConnectionTestQuery("/* ping */ SELECT 1");

这是完整的日志消息:

警告:

811439 [Hikari housekeeper (pool HikariPool-0)] WARN com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for connection com.mysql.jdbc.JDBC4Connection@11d0896, stack trace follows java.lang.Exception: Apparent connection leak detected at com.hcpdatabase.DataSource.getConnection(DataSource.java:69) at com.database.AccessDatabase.create_alert(AccessDatabase.java:3849) at com.runnable.StartTaskRunnable2.execute(StartTaskRunnable2.java:78)

这正常吗?我必须捕获这个吗?

最佳答案

因为我一遍又一遍地检查我的代码。我开始意识到我在错误的树上吠叫,似乎 hikari 在连接泄漏方面非常可靠。问题是亚马逊 aws ec2 实例正在窃取我的一些 cpu,甚至比我想象的还要大。因此,在 cpu 上升 99% 后,即使我的代码在 finally block 中明确关闭了它,也会检测到连接泄漏。所以问题出在机器上。

感谢所有参与回答的人。

关于java - 如何减轻连接 com.mysql.jdbc.JDBC4Connection@11d08960 触发的连接泄漏,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33887002/

相关文章:

mysql - 如何从mysql查询结果中删除+-----+

java - JDBC iso-8859-1 编码

java - 获取 SQL 异常 ORA-08103 : object no longer exists in java

mysql - tomcat、hibernate、mysql连接问题

java - 在 JButton 上添加和打开链接

java - 从 servlet 中获取对象的数组列表

java - 简单的 ArrayList 问题

php - 除了作为 blob 之外,是否有更节省空间的方式将图像存储在数据库中?

java - 在同一项目中切换 MongoDB 和 JPA (Postgres)

java - 如何删除图像的白色背景 - java