java - java.lang.OutOfMemory : GC Overhead limit exceeded vs. java.lang.OutOfMemory: Multicast listener 有什么区别

标签 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

我相信今天的错误与服务器的配置有关。

请帮助澄清。

最佳答案

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

第二个错误表示您的应用程序在某些处理过程中内存不足。

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

遇到一个very good discussion on SO

关于java - java.lang.OutOfMemory : GC Overhead limit exceeded vs. java.lang.OutOfMemory: Multicast listener 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10901808/

相关文章:

java - 如何将应用程序置于停止状态而不破坏后退按钮?

java - 如何向 glassfish 添加 Interbase 连接池?

java - Apache POI : Retrieve page number from XWPFParagraph instance?

java - JasperReports 5.2 不适用于 poi-3.7

java - 如何使用 Java 客户端通过带 SSL 的 SMTP 发送电子邮件?

java - 处理数据库约束 hibernate

java - 我尝试创建可在 Eclipse 上使用的 Glassfish 服务器有什么问题吗?

java - 如何使用 Apache POI 将 HSSFWorkbook 转换为 XSSFWorkbook?

java - 保存/加载二叉搜索树的内容

glassfish - 在 Glassfish 上使用 CDI 部署时出错