Java GCViewer模式分析

Java GCViewer模式分析,java,garbage-collection,Java,Garbage Collection,有关于GCViewer模式的教程吗?我遇到一个问题,GC日志图表是这样形成的,但无法确定这是内存泄漏问题还是仅仅需要更多内存。谁能帮帮我吗 从日志中,它显示错误“error-java.lang.OutOfMemoryError:超出了GC开销限制” 谢谢 为了确定是否存在内存泄漏,拥有GC图表是不够的。 基本上有两种策略: 内存泄漏检测器: 一个很好的工具就是使用。它的内存泄漏检测器允许您计算特定类的实例数。通过将内存检测器连接到一个正在运行的JVM,您可以监控这个数字随时间的变化。在那里,您应

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

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


为了确定是否存在内存泄漏,拥有GC图表是不够的。 基本上有两种策略:

  • 内存泄漏检测器: 一个很好的工具就是使用。它的内存泄漏检测器允许您计算特定类的实例数。通过将内存检测器连接到一个正在运行的JVM,您可以监控这个数字随时间的变化。在那里,您应该看到是否有内存泄漏。显示这些数字的工具示例可在中找到
  • 堆转储分析:eclipse中的MAT是一种常用工具。它是一个基于Eclipse的应用程序,用于分析JVM的堆转储。您可以随时使用作为JDK一部分提供的jmap进行堆转储。或者,您也可以等待JVM在OOM发生时转储文件。 通过分析堆转储,MAT应该可以合理地怀疑泄漏的内容。您还可以清楚地看到创建了多少对象(应用程序类或库类)以及它们之间的关系。从这幅图以及您对应用程序行为的了解中,您应该能够发现应用程序的哪一部分出错了

  • 一般来说,对于开发人员和管理员来说,第一种方法更简单、更直观。第二个需要更多关于JVM和堆的知识。此外,第一个可以在生产系统中使用,因为JRockit任务控制在生产JVM中具有较低的开销。

    为了确定是否存在内存泄漏,拥有GC图表是不够的。 基本上有两种策略:

  • 内存泄漏检测器: 一个很好的工具就是使用。它的内存泄漏检测器允许您计算特定类的实例数。通过将内存检测器连接到一个正在运行的JVM,您可以监控这个数字随时间的变化。在那里,您应该看到是否有内存泄漏。显示这些数字的工具示例可在中找到
  • 堆转储分析:eclipse中的MAT是一种常用工具。它是一个基于Eclipse的应用程序,用于分析JVM的堆转储。您可以随时使用作为JDK一部分提供的jmap进行堆转储。或者,您也可以等待JVM在OOM发生时转储文件。 通过分析堆转储,MAT应该可以合理地怀疑泄漏的内容。您还可以清楚地看到创建了多少对象(应用程序类或库类)以及它们之间的关系。从这幅图以及您对应用程序行为的了解中,您应该能够发现应用程序的哪一部分出错了

  • 一般来说,对于开发人员和管理员来说,第一种方法更简单、更直观。第二个需要更多关于JVM和堆的知识。此外,第一个可以在生产系统中使用,因为JRockit任务控制在生产JVM中具有较低的开销。

    谢谢。你知道在哪种情况下会发生内存激增吗?例如,在上图中,内存突然激增,持续4分钟,然后崩溃(内存级别恢复正常)。一个程序一次加载或创建多个对象或几个非常大的对象的可能性很大。例如,发出SQL查询并尝试一次性获取行作为对象,而不进行分页。另一个例子是处理一个非常大的对象,或者一个包含许多引用对象的对象。其中一个突出的例子是作为内存中的DOM对象读入的非常大的XML文档。谢谢。你知道在哪种情况下会发生内存激增吗?例如,在上图中,内存突然激增,持续4分钟,然后崩溃(内存级别恢复正常)。一个程序一次加载或创建多个对象或几个非常大的对象的可能性很大。例如,发出SQL查询并尝试一次性获取行作为对象,而不进行分页。另一个例子是处理一个非常大的对象,或者一个包含许多引用对象的对象。其中一个突出的例子是作为内存中的DOM对象读入的非常大的XML文档。