当前位置: 首页 > 知识库问答 >
问题:

如何缓解连接com.mysql.jdbc.JDBC4Connection@11d08960触发的连接泄漏,

慕弘伟
2023-03-14

我有一个mqtt客户端从主题获得请求订阅,然后我把它给固定大小的线程池50。我使用hikaricp 2.4.2为数据库池MySQL数据库。

Im目前使用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管家(池HikariPool-0)]警告。扎克瑟。希卡里。水塘ProxyLeakTask-已为连接com触发连接泄漏检测。mysql。jdbc。JDBC4Connection@11d0896,堆栈跟踪遵循java。lang.异常:在com上检测到明显的连接泄漏。hcpdatabase。数据源。getConnection(DataSource.java:69)位于com。数据库访问数据库。在com上创建_警报(AccessDatabase.java:3849)。可运行。StartTaskRunnable2。执行(StartTaskRunnable2.java:78)

这正常吗?我一定要抓住这个吗?

共有2个答案

印季
2023-03-14

遍历带有堆栈跟踪的代码,它将引导您进入未关闭的连接或超过阈值的连接。

傅长恨
2023-03-14

当我一遍又一遍地检查我的代码时。我意识到我找错了人,看起来hikari在连接泄漏方面非常可靠。问题是当Amazon aws ec2实例窃取了我的一些cpu,甚至比我想象的还要大。所以在cpu上升99%后,即使我的代码最终关闭了它,连接泄漏还是被检测到了。所以问题在于机器。

我感谢所有参与回答的人。

 类似资料:
  • 我正在开发一个在Java服务器上运行的游戏。对于数据库池,我使用的是HikariCP,这是一个优秀的库,但它现在抛出了以下错误: 现在我知道连接泄漏意味着打开的连接在某个地方漂浮,但我不知道如何或在哪里漂浮。 下面是我的数据库类中的一个方法,根据堆栈跟踪,错误应该发生在这里。 这只是启动语句的一个基本方法。调用它时,我使用它,然后调用、和 但它告诉我连接是打开的。 我怎么解决这个?谢了!

  • 我正在尝试识别应用程序中的SQL连接泄漏。经过一些操作后,当我的应用程序处于空闲状态(用户未执行任何活动)时,我在返回的结果集中看到7个与我的数据库的连接。所有连接的状态均为,所有连接的值均为。 我正在使用连接池,但连接字符串中未指定连接生存期。这意味着如果我是对的,将使用它的默认值0。连接生存期的值为零意味着SQL server永远不应该关闭连接,对吗? 我让我的应用程序空闲一段时间(15-20

  • 我的连接器类: 连接器。JAVA 这是我的DAO类(简化):UserDAO. java 在这里,我发现了关于Hikari的一些事实的问题: 您必须在HikariCP为您提供的连接实例上调用关闭() 可能是我的不起作用,因为它只是Hikari在方法中提供给我的连接的副本。

  • 我正在运行一个Spring boot Java应用程序,使用默认的HikariCP作为数据源: Hikari版本-3.4.5 在AWS EKS中运行的Spring Boot version-2.4.5 JDBI版本-3.9.1 DB-AWS RDS Postgres 我的Spring应用程序变得没有响应,因为它失去了Hikari池中的所有连接。这并不是确定地发生,但是一旦它开始发生,唯一可能的恢复

  • 我有一个带有和对象的。每次调用,我都会执行以下操作: 我不关闭,因为没有关闭方法。每次调用servlet时,mongo中使用的连接数都会增加: 什么是与mongo和morphia建立联系的正确方式?这种联系到底在哪里?谢谢

  • 我正在Scala应用程序中使用Apache Http客户端。 该应用程序具有相当高的吞吐量和高并行性。 我不确定,但我想我可能是在泄露连接。似乎每当使用客户机的代码部分变得繁忙时,应用程序就会失去响应。我的怀疑是,我正在泄漏套接字或其他东西,从而导致应用程序的其他方面停止工作。与其说是连接泄漏,还不如说是关闭速度不够快。 对于更多上下文,有时,某些操作会导致此代码每分钟并行执行数百次。当这种情况发