java.lang.OutOfMemory有什么区别:超出了GC Overhead limit与java.lang.OutOfMemory:Multicast listener

时间:2012-06-05 17:16:30

标签: java glassfish apache-poi application-server

我正在研究应用程序的缓慢程度,并最终调查集群环境中的一个实例。几周前我发现了以下错误:

[#|2012-05-11T14:12:03.460-0400|SEVERE|sun-appserver2.1|javax.enterprise.system.container.web|_ThreadID=89;_ThreadName=httpSSLWorkerThread-7311-0;_RequestID=7afaee11-c970-40dd-b5fb-29498af8e512;|StandardWrapperValve[LoginModule]: PWC1406: Servlet.service() for servlet LoginModule threw exception
java.lang.OutOfMemoryError: GC overhead limit exceeded

我认为由于GC开销超出限制,它与我的应用程序有关。有一个报告非常强调使用POI在excel中放置记录,所以我认为这可能会导致它。作为短期修复,直到下一个版本,我们通知1个有权访问此报告的用户不能访问它。

但是,今天,两周后,其中一个实例再次发生故障,在搜索日志时我发现了以下错误:

[#|2012-06-05T10:31:36.532-0400|SEVERE|sun-appserver2.1|net.jxta.impl.endpoint.mcast.McastTransport|_ThreadID=141;_ThreadName=IP Multicast Listener for mcast://228.8.10.93:31676;_RequestID=90caf76e-b740-4f11-8ffe-8ab88a740569;|Uncaught Throwable in thread :IP Multicast Listener for mcast://228.8.10.93:31676
java.lang.OutOfMemoryError: Java heap space
|#]

请注意GC overhead limit exceededJava heap space的区别。我试图找出我今天看到的错误是否是由于用户访问报告的相同原因引起的,但是,我相信如果是这种情况,那么我会看到GC overhead limit exceeded

我认为今天的错误与服务器的配置更相关。

请帮助澄清。

2 个答案:

答案 0 :(得分:2)

第一个错误“GC Overhead”意味着GC占用了大部分CPU周期,大多数意味着98%或99%,并且在每次运行中它释放的内存非常少1-2%。

第二个错误意味着您的应用程序在某些处理期间内存不足。

此外,您的调查是正确的POI占用过多的内存,POI有额外内存消耗的历史。

遇到very good discussion on SO

答案 1 :(得分:0)

对类似主题here进行了很好的讨论。它基本上是由GC消耗了大量时间引起的,但恢复的内存非常少。