我们有一个使用休眠4.2.22(JBoss 6.4.7)的应用程序。在我们的代码中,我们不使用任何PreparedStatements,每个db问题都由休眠处理。
但是在性能测试期间,我们得到了oom。这样做的原因似乎是我们猜测是从休眠创建的大量oracle.jdbc.driver.T4CPreparedStatement实例。 即使我们从VisualVM执行GC,在运行测试时,它们仍然存在并增加。
您怎么看,有办法解决这个问题吗?
最好的问候 弗雷德里克
答案 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
原因是因为 DataSource
本身处理内存中的 T4CPreparedStatement
对象,因此通过将其减少到一个较小的值可以解决问题