1

jboss5 でアプリケーションを実行しています。ユーザーログイン側とバックグラウンドクォーツジョブがあります。1 つのバックグラウンド ジョブがソープ コールを行い、大きなオブジェクトをプルダウンして解析します。かなりの量のメモリを使用します。

次のような 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 アプリケーションを毎日使用する場合、1 か月以上使用しても OOM の問題は見られません。

アプリを使うと何かいいことがありそうですが、よくわかりません。どこから始めて、何を試してみるべきか、誰か知っていますか?

jdk 1.7.0.11 を使用しており、javaopts は

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

ありがとうございました、

ジム

4

1 に答える 1

1

JVM 引数を使用-XX:+HeapDumpOnOutOfMemoryErrorしてから、MAT でヒープ ダンプを開きます。MAT は、OOM の疑いのあるものを表示します。自分でヒープを調べて、ヒープの大部分を占めるオブジェクトを特定することもできます。このようにして、問題の原因を簡単に見つけることができます。

また、GC ロギングを有効にすることで、OOM につながるパターンがあるかどうかを確認できます。

于 2013-06-26T04:28:03.757 に答える