java - 奇怪的java jvm内存不足

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

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

我看到了这样的 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 "

谢谢,

吉姆

最佳答案

使用 -XX:+HeapDumpOnOutOfMemoryError JVM 参数,然后在 MAT 中打开堆转储。 MAT 会向您展示 OOM 的嫌疑人,您甚至可以自己遍历堆并识别哪些对象占用了堆的大部分空间。这样您就可以轻松找到问题的根源。

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

关于java - 奇怪的java jvm内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17306489/

相关文章:

java - Netbeans GUI 不显示

java - 无法创建抽象父类(super class)的非抽象子类?

java - System.currentTimeMillis() 的巨大差异

java - JBoss 连接池创建许多到 MySQL 的连接

java - 创建 RMI 连接器客户端

c# - C# 中的静态方法与实例方法

C#:在什么情况下应该清空引用?

c++ - 垃圾收集 - 响应能力

java - 在字符串程序中找不到 main 方法。请任何人都可以帮助我执行该程序而不会出现此错误

java - Jboss中的axis2.jar冲突