【问题标题】:Permgen Space: Ideal behaviour to be achievedPermgen Space:要实现的理想行为
【发布时间】:2013-08-06 09:53:43
【问题描述】:

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

我正在使用带有Eclipse MAT 的JConsole。

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

代码缓存:

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

内存池 Perm-Gen(Shared-rw):

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

内存池 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
  • 我需要更多信息。我真的不确定如何正确和完整地解释这些细节。

请看附件。请提供意见。

【问题讨论】:

  • 这段代码你的生产环境是什么?如果答案不是“Windows XP”,那么您就是在浪费时间。
  • 同意。确实应该在与生产环境相同的环境中进行分析。但如果我能理解这里的真正目标是什么,那真的很有帮助。截至目前,我正在尝试学习相同的内容。然后在未来,我会尝试在生产中做到这一点。
  • 我想补充一点,我正在尝试比较两个代码库(一个重构的和一个旧的)。我想知道通过分解为定量数据所获得的好处的程度。我认为如果我在同一个平台上记录结果,比较将成立(无论 Production 或 Development )。
  • 分析也应该在开发方面进行。记忆行为受设置和平台可能的影响,这可能会产生灾难性的影响,这是真的。但是本地分析可能已经显示了哪些对象的寿命很长,更不用说速度瓶颈了。
  • 还有几件事:

标签: java eclipse performance memory permgen


【解决方案1】:

几个建议:

1) 抛弃 JConsole。 VisualVM 包含在 JDK 中,并且在各个方面都非常出色(并且包括桥接模式,因此您甚至可以使用旧插件,如果这就是让您继续使用 JConsole 的全部)。

2) 开启 GC 登录。你至少需要这些标志:

-Xloggc:(用于更全面的 GC 日志记录) -XX:+PrintGCDetails(更详细的输出) -XX:+PrintTenuringDistribution(显示JVM假设的tenuring阈值)

找一个工具来分析日志——你需要注意对象的工作集以及 PermGen,即使后者是你的主要关注点。 GCViewer 是免费的,或者有商业工具(完全公开 - 我为 jClarity 工作,它为此目的生产 Censum 工具)。

3) 你需要跑超过 1 小时。很多应用在很长一段时间内都不稳定。

4) 再次查看您的数字,这看起来并没有什么特别/问题。你为什么要调整这部分 JVM?系统的哪个方面表明这是一个严重的问题并且需要解决?您是如何确定这一点的,以及这个问题是如何表现出来的?

【讨论】:

  • 我发现您的建议非常有用。我遵循了你的指导方针。请查看更新后的问题。
猜你喜欢
  • 2010-09-10
  • 1970-01-01
  • 2012-11-25
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多