我们有一个使用 hibernate 4.2.22 (JBoss 6.4.7) 的应用程序。在我们的代码中,我们不使用任何PreparedStatements,每个数据库问题都由hibernate处理。
但是在性能测试期间我们遇到了 oom。其原因似乎是大量的 oracle.jdbc.driver.T4CPreparedStatement 实例,我们猜测它们是从 hibernate 创建的。 即使我们从 VisualVM 执行 GC,它们仍然存在,并且在我们运行测试时会增加。
大家觉得怎么样,有办法解决这个问题吗?
最诚挚的问候 弗雷德里克
最佳答案
我想我们已经解决了这个问题。我们在 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。
欢迎大家提出意见。 此致 弗雷德里克
关于java - 内存泄漏随着 T4CPreparedStatement 的增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53121911/