gpt4 book ai didi

database - Grails 连接池 - 连接没有关闭?

转载 作者:太空狗 更新时间:2023-10-30 01:52:53 25 4
gpt4 key购买 nike

我有一个带有数据库连接池的 grails/groovy 网络应用程序。设置是这样设置的:

dataSource:
url: "jdbc:postgresql://192.168.100.53:5432/bhub_dev"
properties:
jmxEnabled: true
initialSize: 5
maxActive: 25
minIdle: 5
maxIdle: 15
maxWait: 10000
maxAge: 600000
timeBetweenEvictionRunsMillis: 5000
minEvictableIdleTimeMillis: 60000
validationQuery: SELECT 1
validationQueryTimeout: 3
validationInterval: 15000
testOnBorrow: true
testWhileIdle: true
testOnReturn: false
jdbcInterceptors: ConnectionState
defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED

我正在使用 java-melody 进行诊断和监控,并注意到一些奇怪的行为。例如,当执行查询数据库的作业时,连接可以越过 maxActive 属性。为什么这甚至是可能的?

enter image description here

我需要显式关闭 Grails 连接吗?该作业调用一个服务方法,该方法通过 withCriteria Grails 调用简单地执行数据库查询,例如:

def activities = WorkActivity.withCriteria{
eq("workCategoryActive", true)
order("id", "desc");
}

似乎每次运行时,都会打开 2 个新连接,但它们每次都无法正常关闭。

此外,在每次页面刷新时,都会调用一些执行查询的后端,有时甚至在刷新时,似乎还会打开 2 个新连接。

enter image description here

我是 Grails 开发人员的新手,所以我不知道我是否必须/甚至可以关闭这个 withCriteria 数据库连接。

感谢您的任何帮助。数据库为PGSQL。

编辑:好的,现在我正在查看 java-melody 中的线程诊断,Tomcat 池清理器似乎处于等待状态,这就是连接计数没有下降的原因?此外,似乎每次运行该作业时,都会启动 2 个线程,而其中一个会陷入等待状态?这到底是怎么回事。

enter image description here

最佳答案

你应该看看连接池是如何工作的,基本上连接不会关闭,它们正在重用和打开。因此,当它达到最大值(在您的情况下为 50)时,连接将等待免费。它是这样工作的,因为打开连接是一项复杂的工作。关于docs他们说连接已关闭,这意味着它会回到池中,但不要关闭。 The same but more description

关于database - Grails 连接池 - 连接没有关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51437196/

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