gpt4 book ai didi

hibernate - 最大连接被奇怪地炸毁,而大量空闲连接

转载 作者:行者123 更新时间:2023-12-05 03:02:00 26 4
gpt4 key购买 nike

我检查了 max available connection应该是 97,因为我的 max_connection 是 100superuser_reserved_connections 默认是 3。

我正在使用 hibernate-envers 5.2.3.FinalSpring Boot 1.5.2.RELEASE管理数据库操作。

我正在使用 @Autowired 连接存储库并将其传递到数百个线程中,这些线程将从数据库中搜索并保存到数据库。

连接异常提示我,但是当我通过 pgAdmin4 检查连接时

enter image description here

问题

  1. 为什么连接这么高,idle几乎占用了所有连接?
  2. 是不是在Hibernate中每次操作,我都会创建一个连接?有没有详细说明此设计的官方文档?
  3. 在 Hibernate 中有什么方法可以释放闲置的东西吗?
  4. 或者实际上我应该研究另一个地方而不是 Hibernate?

已更新

我通过缓存java代码中的数据来避免频繁搜索和保存解决了这个问题,但是上面的问题仍然存在。

任何帮助将不胜感激;)

最佳答案

当使用 JPA/Hibernate 时,您必须设置一个 DataSource,这通常是一个使用连接池的实现,因此它不必一直重新创建连接。相反,将采用连接池中的现有连接。

Spring 提供并支持多种实现,例如 HikariCP、DBCP、Tomcat 等。默认情况下,Spring boot 1.x 使用 Tomcat 连接池,而 Spring boot 2.x 使用 HikariCP .

您可以通过设置 minimumIdle 属性来配置最小空闲连接数。默认情况下,这与 maximumPoolSize 相同,后者又默认为 10。这意味着 Hikari 默认情况下将尝试保持 10 个连接,无论是否空闲。

在 Spring boot 中,您可以使用 spring.datasource.hikari.* 前缀配置 HikariCP 属性,例如:

spring.datasource.hikari.minimumIdle=10
spring.datasource.hikari.maximumPoolSize=10

引用relevant documentation :

This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool. If the idle connections dip below this value and total connections in the pool are less than maximumPoolSize, HikariCP will make a best effort to add additional connections quickly and efficiently. However, for maximum performance and responsiveness to spike demands, we recommend not setting this value and instead allowing HikariCP to act as a fixed size connection pool. Default: same as maximumPoolSize

如您所见,建议不要更改此行为,因此,如果您使用 HikariCP 在您的应用程序未使用时看到大量空闲连接,这是很正常的。但是,除非另有配置,否则每个应用程序最多应该有 10 个连接。他们还建议将最大池大小保持尽可能小,如 About Pool Sizing 中所述。文章。

此外,您可以通过配置 idleTimeout 设置来配置空闲时保持连接的时间。

关于hibernate - 最大连接被奇怪地炸毁,而大量空闲连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55256504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com