1

有没有关于 GCViewer 模式的教程?我遇到了一个问题,即 GC 日志图表是这样形成的,但无法确定这是内存泄漏问题还是只是需要更多内存。谁能帮帮我?

从日志中,它显示错误“错误 - java.lang.OutOfMemoryError:超出 GC 开销限制”谢谢。

在此处输入图像描述

4

1 回答 1

1

为了弄清楚是否存在内存泄漏,只有 GC 图是不够的。基本上有两种策略:

  1. 内存泄漏检测器:一个非常好的工具是使用Oracle JRockit Mission Control。它的内存泄漏检测器允许您计算特定类的实例数。通过将内存检测器连接到正在运行的 JVM,您可以监控该数字如何随时间变化。在那里你应该看到是否有内存泄漏。可以在http://docs.oracle.com/cd/E11035_01/jrockit/intro/wwimages/memleak3.gif找到显示这些数字的工具示例。
  2. 堆转储分析:一种常用的工具是来自 eclipse 的 MAT。它是一个基于 Eclipse 的应用程序,用于分析 JVM 的堆转储。您可以随时使用作为 JDK 一部分提供的 jmap 进行堆转储。或者,您也可以等待 JVM 在发生 OOM 时转储文件。通过分析堆转储,MAT 应该可以合理地怀疑是什么泄漏。您还可以清楚地看到创建了多少对象(应用程序类或库类)以及它们之间的关系。从这张图片以及您对应用程序行为的了解中,您应该能够找出应用程序的哪一部分出错了。

一般来说,对于开发人员和管理员来说,第一种方法更容易、更直观。第二个需要更多关于 JVM 和堆的知识。此外,第一个可用于生产系统,因为 JRockit Mission Control 在生产 JVM 中的开销较低。

于 2013-10-30T08:29:10.370 回答