
GC Dump - 日本エクセム株式会社 Oracle 技術情報
目次[非表示]
- 1.基本情報
- 2.Sun Hotspot JVM
- 2.1.基本フォーマット
- 2.2.Collector種類別のフォーマット
- 2.2.1.Serial Collector
- 2.2.2.Parallel Collector
- 2.2.3.CMS Collector
- 2.3.Memory LeakとGC Dump
- 3.IBM JVM
- 4.関連情報
基本情報
GC DumpはJVMのHeap使用状況を把握するための最も基本的なツールです。GC Dumpを使用すると、次のような情報を得ることができます。
GC Dumpは、システムに対する負荷が小さいため、オペレーティングシステムでGC Dumpを残すオプションを選択ことをお勧めします。もしメモリの問題が発生した場合GC Dumpだけで情報が不足する場合には、Heap Dumpを利用して、追加の分析を行うことができます。ただし、Heap Dumpは、システムに大きな負荷を与えることができるので、必要な場合にのみ使用することをお勧めします。
Sun Hotspot JVM
Sun Hotspot JVMは、次のようなオプションを利用してGC Dumpを制御します。
基本フォーマット
GC Dumpの出力結果は、基本的に次のようなフォーマットを持ちます。
次に簡単な例を示します。
上記の例から、読みとれることを説明します。
Collector種類別のフォーマット
Serial Collector
Serial CollectorはUseSerialGCオプションを利用して活性化されます。Serial CollectorはYoung GenerationとOld Generationクリーンアップ操作の両方にSerial方式、すなわち一つのThread(Single Thread)を使用してGC処理を実行します。Serial CollectorによるGC Dumpは、次の3つの種類のログが記録されます。
Serial CollectorでのGC Dumpの完全なサンプルは、Serial Collector GC Log Sampleを参照ください。
Parallel Collector
Parallel CollectorはUseParallelGCオプションを利用して活性化されます。 Parallel CollectorはYoung Generationクリーンアップ操作にParallel方式、すなわち、複数のThreadを使用します。 Enterprise級の大型Applicationは、非常に大きなサイズのYoung Generationを使用することになります。この場合、Minor GCに多くの時間がかかることがあります。 Parallel CollectorはMinor GC作業にMulti Threadを使用することにより、Minor GCによるPause Timeを最小限に抑えています。 UseParallelOldGCオプションを使用すると、Old GenerationにもParallel方式を使用することができます。
Parallel CollectorによるGC Dumpは、次のような種類のログが記録されます。
Parallel CollectorでのGC Dumpの完全なサンプルは、Parallel Collector GC Log Sampleを参照ください。
CMS Collector
CMS CollectorはUseConcMarkSweepGCオプションによって活性化されます。 CMS CollectorはFull GCによるPause Timeを最小限に抑えるためOld Generationのクリーンアップ操作をConcurrent方式で進行します。 CMS CollectorによるGC Dumpは、次のような種類のログが記録されます。
CMS CollectorでのGC Dumpの完全なサンプルは、CMS Collector GC Log Sampleを参照ください。
Memory LeakとGC Dump
Memory Leakが発生した場合、GC Dumpは、次のような典型的なパターンを示します。
上記のパターンは、次のように解釈することができます。
IBM JVM
IBM JVMは、以下のオプションを使用して、GC Dumpを制御します。
IBM JVMは、Sun Hotspot JVMとは異なり、XML形式のログを残します。一般的なフォーマット(Generational Collectionを使用していない場合)は、次のとおりです。
用語の意味は次のとおりです。
この用語を用いて、上記のGC Logを分析すると、次のような事実を知ることができます。
Throughput Collector
Throughput Collectorはgcpolicy(-Xgcpolicy:optthruput)オプションによって活性化されます。IBM JVMは基本的にGenerationを使用していないので、Minor GCとMajor GCの区分がありません。Generationを使用していないため、常にすべてのHeap領域がGC対象となります。これが、gc type=”global”が意味するところです。
Response Time Collector
Response Time Collectorはgcpolicy(-Xgcpolicy:optavgpause)オプションによって活性化されます。Response Time CollectorもまたGenerationを使用していません。したがってThroughput Collectorのようにgc type=”global”で表現されます。
Concurrent Generational Collector
Concurrent Generational Collectorはgcpolicy(-Xgcpolicy:gencon)オプションによって活性化されます。IBM JDK1.5で新たに追加されSun Hotspot JVMのCMS Collectorと非常によく似た技法を使用します。Concurrent Generational CollectorはGenerationに基づいています。したがってMinor GCとMajor GCのような区分が存在します。IBM JVMは、Scavenger GCとGlobal GCという用語が使用されます。上記の例では、af type=”nursery”、gc type=”scavenger”が意味するのはNursery、すなわちYoung GenerationでGCが発生し、Scavenger GC、すなわちMinor GCが発生したことを意味します。