如何解决内存不足的错误生产系统(How to troubleshoot Out Of Memory

2019-06-25 02:41发布

我们正在使用JBoss_4_0_4_GA与在Windows JDK 1.5.0(没有更新)

JBoss服务器是一个包装(3.2.3版)中运行http://wrapper.tanukisoftware.org 。

由于JVM这么老我甚至无法使用-XX:+ HeapDumpOnOutOfMemoryError选项在JVM上。

什么是我的选择,找出问题?

像往常一样,内存异常是发生在应用程序的不同部分。

我没有自由升级JVM的时候了。

    The current VM settings
    Java Additional Parameters
    wrapper.java.additional.1=-Xms512m
    wrapper.java.additional.2=-Xmx1024m
    wrapper.java.additional.3=-Dsun.rmi.dgc.client.gcInterval=3600000
    wrapper.java.additional.4=-Dsun.rmi.dgc.server.gcInterval=3600000
    wrapper.java.additional.5=-Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser
    wrapper.java.additional.6=-Djava.endorsed.dirs=D:/jboss-4.0.4.GA/lib/endorsed

例外的片段

INFO | JVM 1 | 2012/05/31 11时25分03秒| 11:25:03502 ERROR [SOAPFaultExceptionHelper] SOAP请求例外INFO | JVM 1 | 2012/05/31 11时25分03秒| java.rmi.RemoteException异常:java.lang.OutOfMemoryError:Java堆空间; 嵌套的例外是:INFO | JVM 1 | 2012/05/31 11时25分03秒| java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:Java堆空间

INFO | JVM 1 | 2012/05/31 11时25分03秒| java.util.concurrent.ExecutionException:由造成java.lang.OutOfMemoryError:Java堆空间信息| JVM 1 | 2012/05/31 11时25分03秒| 在java.util.concurrent.FutureTask中$ Sync.innerGet(FutureTask.java:205)INFO | JVM 1 | 2012/05/31 11时25分03秒| 在java.util.concurrent.FutureTask.get(FutureTask.java:80)

Answer 1:

你可以尝试做内存转储JMAP (在你提到的标签java 5所以这应该是可能的)。 做几个转储当服务器仍然运作(如每隔一小时左右)。

然后分析它们的Eclipse MAT 。 搜索以做大每个转储对象或对象的集合。 这极有可能是你的内存泄漏。



Answer 2:

我看到两个选项,他们每个人有自己的优点和缺点:

  1. 安装程序代理,并在您的应用程序连接分析器。 这当然有可能是在生产环境中不能接受的一些性能产生严重影响。 但是,这将允许您监视应用程序,并且堆空间几乎完全执行内存转储。

  2. 在其他地方复制生产环境,还可以使用一个分析器。 如果你的问题只与大负荷出现,你可能有让你达到OOME创建负载测试。

使用分析器是查找内存泄漏的最好机会。

否则,你总是可以尝试执行静态代码审查,使用PMD和FindBugs的(除其他静态分析工具),可以发现一些错误。



文章来源: How to troubleshoot Out Of Memory error on Production system