我正在尝试分析/分析核心JAVA应用程序。
我正在使用Eclipse MAT的JConsole。
我在Perm-Gen图表(在Windows XP计算机上以1小时记录的数据)中观察到以下内容:
代码高速缓存:
Memory Pool Perm-Gen(Shared-rw):
Memory Pool Perm-Gen(Shared-r0):
记忆池:
我的问题是,
这里的理想行为是指代表:
的状态以上问题也适用于堆空间分析。
以下是其他说明:
分析应该在与生产相同的环境中完成。但如果我能理解这里真正的目标是什么,那真的会有所帮助。截至目前,我正在努力学习相同的知识。那么将来,我会尝试在生产上做到这一点。
此外,我正在尝试比较两个代码库(一个重构和一个旧)。我想知道重构所带来的好处程度(作为定量数据)。我想如果我在同一平台上录制结果,比较将成立(无论是制作还是开发)。
更新1:
log-living
。 请查看附件。请提供意见。
答案 0 :(得分:1)
一些建议:
1)Ditch JConsole。 VisualVM包含在JDK中,并且在各个方面都是优越的(并且包括桥接模式,因此您甚至可以使用旧插件,如果这一切都能让您保持JConsole)。
2)切换GC登录。你至少需要这些标志:
-Xloggc :(用于更全面的GC记录) -XX:+ PrintGCDetails(更详细的输出) -XX:+ PrintTenuringDistribution(显示JVM假定的临时阈值)
找一个分析日志的工具 - 你需要注意工作的对象集和PermGen,即使后者是你最关心的问题。 GCViewer是免费的,或者有商业工具(完全公开 - 我为jClarity工作,为此目的生成Censum工具)。
3)你需要运行超过1小时。很多应用程序都没有稳定很长一段时间。
4)再看一下你的数字,这看起来并不是一个与众不同的问题。你为什么要调整JVM的这一部分?系统的哪个方面表明这是一个严重的问题,需要加以解决?你是如何确定这一点的,这个问题是如何表现的?