Rav*_*ave 14 java performance hibernate
我有一个项目,我们进行夜间性能测试.这是每天晚上我们的网站被数百名并发"用户"击中3小时的相同测试.性能结果最终呈现两种状态之一 - 坏或好,每个状态似乎都与自身一致.我们的数据库人员(oracle顺便说一句)注意到,在性能不佳的日子里,我们会有很多很多,而不是好日子,但只有一个查询.
从我的分析到目前为止,我认为它与hibernate选择使用/不使用代理有关,但我无法理解什么会在某些日子直接hibernate这样做而不是在其他日子.什么会导致Hibernate中出现这种不稳定的非确定性行为?我在Hibernate 4.2.0和Spring上.我们没有使用二级缓存.我们的服务器上没有其他应用程序.
导致此调用被发出的对象位于通过父/子相关的长链对象的末尾.我们正在成为这个链条的负责人.
一次糟糕的运行,请注意9w执行4m ...查询
一个好的运行,注意到630k执行9wu ...查询
编辑:我无法在模块中重现这一点.似乎当我将-xmx设置得非常低(28m)时,额外的调用不存在,但是在xmx = 128m时,我得到了大部分运行.关于在Hibernate中我可以看到为什么/如何决定它是否应该代理的任何提示?
编辑2:我无法在我的模块中一致地重现.它将适用于5次运行然后失败3然后工作然后失败.每次我运行完全相同的单元测试.它似乎是一个N + 1点的问题,它加载了一堆孩子通过"选择item0 ......"查询,但一个良好的运行期间,它决定使用另一个查询,或不从web服务之间放弃条目调用.我将看到我可以做些什么来混淆我的对象并提供一些细节.遗憾的是,IT存储在数据库中,它使用带有鉴别器的继承.
当然,很难说出为什么会发生这种情况。然而,有一些很好的资源可用于优化 Hibernate 性能并调试其问题。
在链接的文章中,作者建议诊断性能问题的最佳方法是使用YourKit Java Profiler。如果您的负载和性能环境是远程的,并且您无法在本地运行探查器,则可以远程附加一个探查器。当然,运行分析器会产生一些开销,因此您可能会发现您的性能特征发生了变化,因为您附加了一个分析器。尽管如此,这可能是您追踪正在发生的事情的最佳选择。
其他有用的链接:
http://java.dzone.com/articles/debugging-hibernate-generate http://jroller.com/jcarreira/date/20050223#hibernate_tips
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |