Permgen Space:要实现的理想行为

时间:2013-08-06 09:53:44

标签: java eclipse performance memory permgen

我正在尝试分析/分析核心JAVA应用程序。

我正在使用Eclipse MAT的JConsole。

我在Perm-Gen图表(在Windows XP计算机上以1小时记录的数据)中观察到以下内容:

代码高速缓存:

  • 录制开始时:7MB
  • 1小时后:10.5 MB
  • 图表看起来像:斜线略微上升,间隔时间增加。

Memory Pool Perm-Gen(Shared-rw):

  • 录制开始时:7MB
  • 1小时后:7 MB
  • 图表看起来像:与X轴平行。

Memory Pool Perm-Gen(Shared-r0):

  • 录制开始时:5.5MB
  • 1小时后:5.5MB
  • 图表看起来像:与X轴平行。

记忆池:

  • 录制开始时:21MB
  • 1小时后:22.5 MB
  • 图表看起来像:斜线略微上升/下降,间隔时间增加。

我的问题是,

  • 对于上述每个类别,可以推断出Perm-Gen空间的这种行为?
  • 寻找上述每个类别的理想行为应该是什么?

这里的理想行为是指代表:

的状态
  • 申请表现最好。
  • 应用程序没有任何与内存相关的问题。
  • 代码中不需要进行任何改进,以便即时使用资源。

以上问题也适用于堆空间分析。

以下是其他说明:

  • 分析应该在与生产相同的环境中完成。但如果我能理解这里真正的目标是什么,那真的会有所帮助。截至目前,我正在努力学习相同的知识。那么将来,我会尝试在生产上做到这一点。

  • 此外,我正在尝试比较两个代码库(一个重构和一个旧)。我想知道重构所带来的好处程度(作为定量数据)。我想如果我在同一平台上录制结果,比较将成立(无论是制作还是开发)。

更新1:

  • 我进一步申请了8个多小时。
  • 我使用GCViewer:1.31来获取GC信息。
  • 我附加了从GCViewer收集的数据。
  • 我观察到每隔30秒发生一次FULL GC事件。结论是,许多对象都是log-living
  • 我需要进一步的信息。我真的不确定如何正确和完整地解释这些细节。

请查看附件。请提供意见。

enter image description here

1 个答案:

答案 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的这一部分?系统的哪个方面表明这是一个严重的问题,需要加以解决?你是如何确定这一点的,这个问题是如何表现的?