随着T4CPreparedStatement增加的内存泄漏

时间:2018-11-02 15:55:24

标签: java hibernate memory-leaks

我们有一个使用休眠4.2.22(JBoss 6.4.7)的应用程序。在我们的代码中,我们不使用任何PreparedStatements,每个db问题都由休眠处理。

但是在性能测试期间,我们得到了oom。这样做的原因似乎是我们猜测是从休眠创建的大量oracle.jdbc.driver.T4CPreparedStatement实例。 即使我们从VisualVM执行GC,在运行测试时,它们仍然存在并增加。

您怎么看,有办法解决这个问题吗?

最好的问候 弗雷德里克

2 个答案:

答案 0 :(得分:0)

我认为我们已经解决了。我们已经在JBoss中配置了数据源,如下所示:

 <pool>
  <min-pool-size>200</min-pool-size>
  <max-pool-size>400</max-pool-size>
 </pool>
..
<statement>
  <prepared-statement-cache-size>100</prepared-statement-cache-size>
  <share-prepared-statements>true</share-prepared-statements>
 </statement>

现在我们将其更改为

<statement>
 <prepared-statement-cache-size>5</prepared-statement-cache-size>
 <share-prepared-statements>true</share-prepared-statements>
</statement>

现在,GC似乎运行良好。我想准备好的语句池太大了。我猜是400 * 100,现在是400 * 5。

欢迎所有评论。 最好的祝福 弗雷德里克

答案 1 :(得分:0)

就我而言,我使用的是 WebLogic,因此通过修改管理控制台中的 DataSource 设置 Statement Cache Size 解决了问题。

我已将其从默认的 10 修改为 1

enter image description here

原因是因为 DataSource 本身处理内存中的 T4CPreparedStatement 对象,因此通过将其减少到一个较小的值可以解决问题