奇怪的java jvm outofmemory

奇怪的java jvm outofmemory,java,jboss,garbage-collection,out-of-memory,Java,Jboss,Garbage Collection,Out Of Memory,我有一个在jboss5下运行的应用程序。它有一个用户登录端以及后台工作。一个后台作业进行soap调用,并下拉一个大型对象进行解析。它使用了大量的内存 我看到一个模式,当我得到一个OOM异常时,如下所示: 2013-06-04 21:44:36,855 ERROR [STDERR] (QuartzScheduler_Scheduler-NON_CLUSTERED_MisfireHandler) java.lang.OutOfMemoryError: Java heap space 2013-06-

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

我看到一个模式,当我得到一个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)
谢谢,


Jim

使用
-XX:+HeapDumpOnAutofMemoryError
JVM参数,然后在MAT中打开堆转储。MAT将向您显示OOM的可疑对象,您甚至可以亲自遍历堆并确定哪些对象占据了堆的大部分。这样你就很容易找到问题的根源


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

使用
-XX:+HeapDumpOnOutOfMemoryError
JVM参数,然后在MAT中打开堆转储。MAT将向您显示OOM的可疑对象,您甚至可以亲自遍历堆并确定哪些对象占据了堆的大部分。这样你就很容易找到问题的根源


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

相关的代码可能会有所帮助,因为代码中似乎存在内存泄漏。我建议使用VisualVM之类的工具来识别内存中的对象和相关代码。但最好的做法是在使用对象并离开活动后手动分配空引用,例如,如果您正在使用某个Arraylist,请在活动的onDestroy中为其提供null引用。有时这有助于解决内存问题。它在运行javax.xml.transform.Transformer transform()方法时崩溃。上面的ArrayList嵌套在transform()方法中。它提取一个需要解析的大型REST XML文件。但是,如果用户在UI中交互,为什么它永远不会发出OOM,如果没有人使用该应用程序,它也会发出OOM?此外,这种例行程序每晚都会发出石英声。它引用Springbeans来获得DB持久性,然后进行xml调用。所以我看不出有什么理由在它结束的时候不被GC分解。它将连续成功3-7个晚上(变量),然后崩溃。相关代码将有助于避免代码中出现内存泄漏。我建议使用VisualVM之类的工具来识别内存中的对象和相关代码。但最好的做法是在使用对象并离开活动后手动分配空引用,例如,如果您正在使用某个Arraylist,请在活动的onDestroy中为其提供null引用。有时这有助于解决内存问题。它在运行javax.xml.transform.Transformer transform()方法时崩溃。上面的ArrayList嵌套在transform()方法中。它提取一个需要解析的大型REST XML文件。但是,如果用户在UI中交互,为什么它永远不会发出OOM,如果没有人使用该应用程序,它也会发出OOM?此外,这种例行程序每晚都会发出石英声。它引用Springbeans来获得DB持久性,然后进行xml调用。所以我看不出有什么理由在它结束的时候不被GC分解。它将连续成功3-7晚(可变),然后崩溃。
set "JAVA_OPTS=-Xrs -Xms256M -Xmx4096M -XX:MaxPermSize=256m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC "