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

一定数量的查询后出现HikariCP连接超时错误

贺兴昌
2023-03-14

在开始之前,我想说我已经检查了以下内容,但它们没有帮助我:

  • HikariCP连接错误
  • HikariCP-连接不可用
  • https://github.com/brettwooldridge/HikariCP/issues/104

基本上,我得到了一个HikariCP stracktrace,我不知道是什么引起的。

java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:548)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:186)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:145)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:83)
at de.arraying.Arraybot.managers.ManagerSync.addCustomCommand(ManagerSync.java:192)
at de.arraying.Arraybot.commands.CommandsCommand.onCommand(CommandsCommand.java:100)
at de.arraying.Arraybot.commands.Command.execute(Command.java:72)
at de.arraying.Arraybot.listeners.ListenerChat.onGuildMessageReceived(ListenerChat.java:68)
at net.dv8tion.jda.core.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:299)
at net.dv8tion.jda.core.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:64)
at net.dv8tion.jda.core.handle.MessageCreateHandler.handleDefaultMessage(MessageCreateHandler.java:97)
at net.dv8tion.jda.core.handle.MessageCreateHandler.handleInternally(MessageCreateHandler.java:47)
at net.dv8tion.jda.core.handle.SocketHandler.handle(SocketHandler.java:38)
at net.dv8tion.jda.core.requests.WebSocketClient.handleEvent(WebSocketClient.java:688)
at net.dv8tion.jda.core.requests.WebSocketClient.onTextMessage(WebSocketClient.java:437)
at com.neovisionaries.ws.client.ListenerManager.callOnTextMessage(ListenerManager.java:352)
at com.neovisionaries.ws.client.ReadingThread.callOnTextMessage(ReadingThread.java:262)
at com.neovisionaries.ws.client.ReadingThread.callOnTextMessage(ReadingThread.java:240)
at com.neovisionaries.ws.client.ReadingThread.handleTextFrame(ReadingThread.java:965)
at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:748)
at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:110)
at com.neovisionaries.ws.client.ReadingThread.run(ReadingThread.java:66)

我尝试更改最大池大小最小空闲,并且我还启用了泄漏检测(在2s)。这些都没有帮助,除了我每次执行查询时都会得到泄漏检测,所以可能与此有关。

这是我当前的配置:

    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.setJdbcUrl("jdbc:mysql://"+url+":3306/"+database+"?useSSL=false");
    hikariConfig.setUsername(username);
    hikariConfig.setPassword(password);
    hikariConfig.setMaximumPoolSize(10);
    hikariConfig.setMinimumIdle(3);
    hikariConfig.setLeakDetectionThreshold(2000);
    dataSource = new HikariDataSource(hikariConfig);

我的查询方法的结构如下:

        // inside a try/catch, after some checks that aren't related.
        PreparedStatement preparedStatement =
                dataSource.getConnection().prepareStatement(query);
        preparedStatement.setString(2, id);
        preparedStatement.setString(3, name);
        preparedStatement.setObject(1, value);
        preparedStatement.executeUpdate();
        preparedStatement.close();

我应该在这之后关闭连接还是什么?我能想象的唯一可能导致错误的事情是内存泄漏,我想我没有任何泄漏。我的CPU使用情况也很好,我的互联网连接也是如此。这些查询都工作得很好,除了在几次之后才开始抛出这个错误。

共有1个答案

高森
2023-03-14

"每次执行查询时,我都会得到泄漏检测"。

你当然是。在您的示例中,您从数据获取一个连接,执行一个PreparedStatement,关闭PreparedStatement,然后不关闭连接,因此它不会返回到池并导致泄漏。

关闭你的人际关系!只有你才能预防。。。错误,连接泄漏。

 类似资料:
  • 我有一个Spring Boot(v2.0.8)应用程序,它使用HikariCP(v2.7.9)池(连接到MariaDB)配置: 问题在于,我们的生产组件每隔几周就会反复抛出 。问题在于它永远不会从中恢复,并且会不断引发异常。因此,需要重新启动计算装置。 从HikariPool源代码来看,这似乎正在发生,因为每次它调用poolEntry都是空的,因此会抛出超时异常。要使其为空,连接池必须没有空闲条目

  • 我目前正试图找到一个替代我的android应用程序后端。目前,我使用php servlets查询Mysql数据库。数据库(Mysql)托管在我学院的一台计算机上,所以我不能更改任何配置,因为我不是管理员。我只能编辑自己的表。 我试图使用以下代码创建一个java RESTful服务器:

  • 我尝试使用HikariCP和mariaDB数据库,但是当我尝试初始化的时候,我得到了下一个错误。 由以下原因引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 我的MariaDBDatabase类: 我的数据库类: 我的家伙.xml

  • 我目前正在通过以下教程学习如何通过mongodb API使用Azure的cosmosdb:https://docs.microsoft.com/en-us/azure/cosmos-db/tutorial-develop-mongoDB-react 本教程的最终repo在这里:https://github.com/azure-samples/react-cosmosdb,但到目前为止,我只是在第5

  • 问题内容: 这是API生成的查询-不确定出什么问题了。 给我错误 SQL命令未正确结束 表中存在所有列,我相信联接和在oracle上运行此命令有问题。 编辑 还有一件事是, 当我从某些API获取时,查询的一部分已修复。 问题答案: Oracle不支持以下语法: 这是标准的SQL,可以在任何数据库中使用。 您的查询还有其他问题。。。子查询不在括号中,没有第一张表。 编辑: 您可以使用该子查询编写此查

  • 我已经掌握了java.sql。SQLTransientConnectionException:springHikariCP-连接不可用,请求在30001ms后超时。 第一个代码块工作良好,第二个(CP)不工作。 什么是错的,如何解决这个问题? JDK - 1.8.0_73。 HikariCP-2.4.5。 Spring4.2.5。释放。 大脑性麻痹