请注意,上面的消息转到stdout或stderr,而不是特定于应用程序的日志文件,如weblogic.log.
对于Java OOM:
收集并分析详细垃圾收集(GC)输出
=================
启用详细GC日志记录。为了有效地记录GC活动,启动时JVM中应包括以下选项:
1. 对于HotSpot: -verbose:gc 、 -XX:+PrintGCDetails 和 -XX:+PrintGCTimeStamps 。 Xloggc :也可以指定将GC详细统计信息重定向到输出文件。除了日志文件消耗的一些磁盘空间之外,基本GC的开销是空的(有关更多详细信息,请参阅Java热点VM选项)。
2. 对于JRockit: -verbose:gc , gcpause , memdbg (有关详细信息,请参阅 JRockit命令行选项 )。
确保JVM在抛出java oom之前执行以下操作
完全GC运行:
=======
执行一个完整的GC,所有不可到达的、幻象的、弱的和不可到达的对象都被移除,并且这些空间被回收。有关不同级别的对象可达性的更多详细信息,请访问: http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html ,参见“A.4.1参考对象类型”。
您可以检查是否在OOM消息之前完成了完全GC。当完成完整的GC时,会打印如下消息(格式因JVM而异:检查JVM帮助消息以了解格式)
[memory ] 7.160: GC 131072K->130052K (131072K) in 1057.359 ms
上述输出的格式如下(注意:整个模式将使用相同的格式):
[memory ] : GC K->K (K), ms
[memory ] - start time of collection (seconds since jvm start)
[memory ] - memory used by objects before collection (KB)
[memory ] - memory used by objects after collection (KB)
[memory ] - size of heap after collection (KB)
[memory ] - total time of collection (milliseconds)
但是,无法断定是否使用详细消息删除了软/弱/幻影可及对象。如果垃圾收集算法是分代算法(对于Jrockit,是gencopy或gencon,对于其他jdk,是默认算法),您还将看到详细的输出,如下所示:
[memory ] 2.414: Nursery GC 31000K->20760K (75776K), 0.469 ms
上面是托管GC(或年轻GC)循环,它将把活动对象从托管(或年轻空间)提升到旧空间。这个循环对于我们的分析并不重要。在JVM文档中可以找到关于时代算法的更多细节。
如果GC循环