奇怪的java jvm outofmemory

时间:2013-06-25 20:04:28

标签: java jboss garbage-collection out-of-memory

我有一个在jboss5下运行的应用程序。它有一个用户登录端以及后台石英作业。一个后台作业进行肥皂调用并拉下一个大对象进行解析。它使用了大量的内存。

我看到一种模式,当我得到这样的OOM异常时:

2013-06-04 21:44:36,855 ERROR [STDERR] (QuartzScheduler_Scheduler-NON_CLUSTERED_MisfireHandler) java.lang.OutOfMemoryError: Java heap space
2013-06-04 21:44:36,855 ERROR [STDERR] (http-0.0.0.0-80-9) Exception in thread "http-0.0.0.0-80-9" 
2013-06-04 21:44:36,855 ERROR [STDERR] (http-0.0.0.0-80-9) java.lang.OutOfMemoryError: Java heap space
2013-06-04 21:44:36,855 ERROR [STDERR] (Session Monitor) Exception in thread "Session Monitor" 
2013-06-04 21:44:36,855 ERROR [STDERR] (Monitor Runner) java.lang.OutOfMemoryError: Java heap space
2013-06-04 21:44:36,855 ERROR [STDERR] (Monitor Runner)     at java.util.Arrays.copyOf(Arrays.java:2219)
2013-06-04 21:44:36,855 ERROR [STDERR] (Monitor Runner)     at java.util.ArrayList.toArray(ArrayList.java:329)
2013-06-04 21:44:36,855 ERROR [STDERR] (Monitor Runner)     at java.util.ArrayList.<init>(ArrayList.java:151)
2013-06-04 21:44:36,855 ERROR [STDERR] (Monitor Runner)     at com.icesoft.util.MonitorRunner$1.run(MonitorRunner.java:54)

这项工作每晚都有。当几天没有人使用UI时,我会在几天后获得OOM。但是当人们每天使用UI应用程序时,我可以使用一个月或更长时间,而且永远不会看到OOM问题。

似乎在使用应用程序时会发生一些好事,但我不知道是什么。有没有人知道从哪里开始寻找和尝试什么?

我们正在使用jdk 1.7.0.11而javaopts是

set "JAVA_OPTS=-Xrs -Xms256M -Xmx4096M -XX:MaxPermSize=256m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC "

谢谢,

吉姆

1 个答案:

答案 0 :(得分:1)

使用-XX:+HeapDumpOnOutOfMemoryError JVM参数然后在MAT中打开堆转储。 MAT将向您展示OOM的嫌疑人,您甚至可以自己遍历堆,并确定哪些对象占据了堆的大部分。通过这种方式,您可以轻松找到问题的罪魁祸首。

此外,它有助于启用GC日志记录,因此您可以查看是否存在任何导致OOM的模式。