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 "
ありがとうございました、
ジム