gpt4 book ai didi

java - Hibernate 应用程序中的连接泄漏

转载 作者:行者123 更新时间:2023-12-01 23:30:26 25 4
gpt4 key购买 nike

我正在从事java企业应用程序工作。该应用程序具有用于后端的 hibernate 框架。由于最近应用程序中的更改,某些代码消耗了 weblogic 服务器中的所有 JDBC 连接池。

应用程序连接是在代码中处理的属性,对于每个线程,我们使用 threadlocal 类创建每个 session 。所以创建连接没有问题。该应用程序已上线超过 5 年。

我们怀疑最近的代码更改导致了这个重大问题。最后我们决定使用分析器工具来调查这个问题。

在此之前,我将回顾一下最近的代码更改,那么在回顾时,我需要在 hibernate 中记住哪些要点?

这是非常危急/严重的情况。所以建议我一些解决这个问题的技巧..

谢谢

最佳答案

查询您的数据库:

select * from pg_stat_activity;

并使用 idle in transaction 检查哪些查询是持久的地位。尝试在代码中找到它们并研究事务未完成的原因。

<小时/>

添加到persistence.xml :

  <property name="hibernate.c3p0.unreturnedConnectionTimeout" value="60"/>
<property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces" value="true"/>

unreturnedConnectionTimeout值应大于 0,因为默认值为 0 - 无限制。这些属性更多的是测试/调试目的,理想情况下不应在生产环境中使用。

<小时/>

代码/配置中需要检查的一些内容:

  • 显式提交事务或使用@Transactional 。请注意@Transactional仅适用于公共(public)方法。

  • 如果您使用 Hibernate 5.1.0.Final,则 persistence.xml 应包含:

<property name="hibernate.connection.provider_class" value="org.hibernate.c3p0.internal.C3P0ConnectionProvider" />

而不是:

<property name="connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />

  • 如果您正在使用

<property name="hibernate.enable_lazy_load_no_trans" value="true" />

延迟加载时可能会导致连接泄漏。相关讨论:

<小时/>

查看相关文章:

关于java - Hibernate 应用程序中的连接泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407327/

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