5G メモリを使用するように Java アプリケーションを構成しています。突然 OutOfMemory が発生しました。gc ログを調べたところ、十分なメモリが残っていることがわかりました。若い世代は割り当てられた領域の 4% を占有し、終身世代の占有率は 5% であり、perm 世代は 43% です。JVM が gc 時に OutOfMemory をスローする理由がわかりません。なぜこれが起こっているのか誰にも分かりますか?よろしくお願いいたします。
JVM メモリと gc の設定:
-server -Xms5g -Xmx5g -Xss256k -XX:NewSize=2g -XX:MaxNewSize=2g -XX:+UseParallelOldGC -XX:+UseTLAB -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:+DisableExplicitGC
gc.log
2009-09-19T03:34:59.741+0000: 92836.778: [GC 必要なサバイバー サイズ 152567808 バイト、新しいしきい値 1 (最大 15) [PSYoungGen: 1941492K->144057K(1947072K)] 3138022K->1340830K(5092800K), 0.1947640 秒] [時間: user=0.61 sys=0.01, real=0.19 秒] 2009-09-19T03:35:29.918+0000: 92866.954: [GC 必要なサバイバー サイズ 152109056 バイト、新しいしきい値 1 (最大 15) [PSYoungGen: 1941625K->144049K(1948608K)] 3138398K->1341080K(5094336K), 0.1942000 秒] [時間: user=0.61 sys=0.01, real=0.20 秒] 2009-09-19T03:35:56.883+0000: 92893.920: [GC 必要なサバイバー サイズ 156565504 バイト、新しいしきい値 1 (最大 15) [PSYoungGen: 1567994K->115427K(1915072K)] 2765026K->1312820K(5060800K), 0.1586320 秒] [時間: user=0.50 sys=0.01, real=0.16 秒] 2009-09-19T03:35:57.042+0000: 92894.079: [GC 必要なサバイバー サイズ 179961856 バイト、新しいしきい値 1 (最大 15) [PSYoungGen: 115427K->0K(1898560K)] 1312820K->1313987K(5044288K), 0.0775650 秒] [時間: user=0.42 sys=0.19, real=0.08 秒] 2009-09-19T03:35:57.120+0000: 92894.157: [フル GC [PSYoungGen: 0K->0K(1898560K)] [ParOldGen: 1313987K->159522K(3145728K)] 1313987K->159522K(2:50) Perm8K8PS244 ->19942K(40256K)]、0.56923 00 秒] [時間: user=2.18 sys=0.05, real=0.57 秒] 2009-09-19T03:35:57.690+0000: 92894.726: [GC 必要なサバイバー サイズ 197066752 バイト、新しいしきい値 1 (最大 15) [PSYoungGen: 0K->0K(1745728K)] 159522K->159522K(4891456K), 0.0072590 秒] [時間: user=0.01 sys=0.00, real=0.00 秒] 2009-09-19T03:35:57.698+0000: 92894.734: [フル GC [PSYoungGen: 0K->0K(1745728K)] [ParOldGen: 159522K->158627K(3145728K)] 159522K->158627K(489195) [PSYoungGen: 0K->0K(1745728K)] ->19934K(45504K)]、0.3280480 秒] [時間: user=1.46 sys=0.00, real=0.33 秒] ヒープ PSYoungGen 合計 1745728K、使用 87233K [0x00002aab73650000、0x00002aabf3650000、0x00002aabf3650000) エデン スペース 1745664K、4% 使用済み [0x00002aab73650000,0x00002aab78b80778,0x00002aabddf10000) スペース 64K から、0% 使用 [0x00002aabddf10000,0x00002aabddf10000,0x00002aabddf20000) スペース 192448K、0% 使用 [0x00002aabe7a60000,0x00002aabe7a60000,0x00002aabf3650000) ParOldGen 合計 3145728K、使用済み 158627K [0x00002aaab3650000、0x00002aab73650000、0x00002aab73650000) オブジェクト スペース 3145728K、5% 使用済み [0x00002aaab3650000,0x00002aaabd138d28,0x00002aab73650000) PSPermGen 合計 45504K、使用 19965K [0x00002aaaae250000、0x00002aaab0ec0000、0x00002aaab3650000) オブジェクト空間 45504K、43% 使用済み [0x00002aaaae250000,0x00002aaaaf5cf668,0x00002aaab0ec0000)
私は 64 ビット Linux と JRE 1.6.0_10 を使用しています。
$uname -a
Linux x 2.6.24-etchnhalf.1-amd64 #1 SMP Tue Oct 14 03:11:45 UTC 2008 x86_64 GNU/Linux
$java -version
java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b15, mixed mode)