Full-stack Observability アプリケーションにガベージコレクション(GC)ログを収集できます。 この方法では、Simple Log Service コンソールでログを表示できます。
アプリケーションはメンテナンス中です。 サーバーから Application Real-Time Monitoring Service (ARMS) にメトリックを収集することをお勧めします。 詳細については、「ARMS」をご参照ください。
前提条件
Full-stack Observability インスタンスが作成されていること。 詳細については、「インスタンスの作成」をご参照ください。
Java プロセスに対して GC ロギングオプションが構成されており、GC ログが特定のファイルに収集されていること。 次の表に、オプションを示します。
JDK 8 オプション
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:gc-%p.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=100M
オプション
必須
説明
-XX:+PrintGCDetails
はい
詳細な GC ログを表示します。
-XX:+PrintGCDateStamps
はい
GC ログに日付タイムスタンプを追加します。
このオプションを有効にすると、JVM は各 GC ログに日付と時刻の情報を追加します。 この情報は、GC ログの時間シーケンスを分析するために使用でき、GC の動作と効果を理解するのに役立ちます。
ほとんどの場合、このオプションは
-XX:+PrintGCDetails
や-XX:+PrintGCTimeStamps
などの他の GC ロギングオプションと組み合わせて使用され、より詳細な GC ログを提供します。-XX:+PrintGCTimeStamps
はい
GC ログにタイムスタンプを追加します。
このオプションを有効にすると、JVM は GC の開始時刻と終了時刻を含むタイムスタンプ情報を各 GC ログに追加します。 この情報は、GC の時間シーケンスとパフォーマンスを分析するために使用でき、アプリケーションの GC 動作を理解し、パフォーマンスを最適化するのに役立ちます。
ほとんどの場合、このオプションは
-XX:+PrintGCDetails
や-XX:+PrintGCDateStamps
などの他の GC ロギングオプションと組み合わせて使用され、より詳細な GC ログを提供します。-Xloggc
はい
GC ログを特定のファイルに収集します。 フォーマット:
-Xloggc:gc-%p.log
。gc-%p.log
はファイルパスを指定します。JDK 8 では、
-Xloggc
オプションは有効であり、-Xloggc:gc-%p.log
形式で構成する必要があります。 ほとんどの場合、このオプションは-XX:+PrintGCDetails
や-XX:+PrintGCTimeStamps
などの他の GC ロギングオプションと組み合わせて使用され、より詳細な GC ログを提供します。-XX:+UseGCLogFileRotation
いいえ(推奨)
GC ログファイルのローテーションを有効にします。
このオプションを有効にすると、JVM は GC ログファイルを自動的にローテーションします。 ファイルのサイズが特定の値に達するか、特定の期間が経過すると、JVM は自動的にログファイルを作成し、以前のログファイルを保持します。 これにより、GC ログファイルが過度に大きくなり、大量のディスク容量を占有するのを防ぎます。 ログファイルのローテーション機能は、ログファイルを効率的に管理および分析するのに役立ちます。
ほとんどの場合、このオプションは
-XX:GCLogFileSize
や-XX:GCLogFileSize
などの他の GC ロギングオプションと組み合わせて使用され、ログファイルのローテーション条件とポリシーを管理します。-XX:NumberOfGCLogFiles
いいえ(推奨)
ローテーション中に保持できる GC ログファイルの最大数を指定します。
このオプションを構成すると、JVM は指定された数の GC ログファイルまで保持します。 ログファイルの数がこのオプションの値を超えると、最も古いログファイルが削除されます。 これにより、過剰なディスク使用を防ぎます。
ほとんどの場合、このオプションは
-XX:+UseGCLogFileRotation
オプションと組み合わせて使用して、GC ログファイルのローテーションを管理します。-XX:GCLogFileSize
いいえ(推奨)
GC ログファイルの最大サイズを指定します。
このオプションを構成すると、JVM はこのオプションの値に基づいて各 GC ログファイルのサイズを監視します。 ログファイルのサイズがこのオプションの値を超えると、JVM は自動的に新しいログファイルを作成し、以前のログファイルを保持します。 これにより、過剰なディスク使用を防ぎます。
ほとんどの場合、このオプションは
-XX:+UseGCLogFileRotation
オプションと組み合わせて使用して、GC ログファイルのローテーションを管理します。JDK 11 オプション
JDK 11 では、
-Xloggc
を除いて、上記のオプションは使用できません。 JDK 11 では、Unified Logging と呼ばれる新しい GC ロギングシステムが導入されています。-Xloggc:
の代わりに-Xlog:gc*:file
を使用できます。 このオプションを使用すると、ログの出力形式とレベルをきめ細かく管理できます。-Xlog:gc*:file=gc-%p-%t.log:time,pid:filecount=5,filesize=10M
説明%t は時点を指定し、%p はプロセス ID を指定し、filecount はファイルをローテーションできる回数を指定し、filesize はファイルのサイズを指定します。
背景情報
Java アプリケーションのパフォーマンスに関連する問題が発生した場合、JVM GC ログを分析して問題のトラブルシューティングを行うことができます。 GC ログは、GC トリガーの原因、GC タイプ、GC の期間、収集されるオブジェクトの数など、GC に関する情報を提供します。 GC ログを分析することで、次の一般的な問題を特定して処理できます。
メモリリーク:GC ログを分析することで、オブジェクトの作成と破棄のプロセス、およびヒープメモリ内でのオブジェクトの割り当てを取得できます。 特定のオブジェクトを使用した後、オブジェクトが解放されない場合、メモリリークが発生する可能性があります。 GC ログを分析することで、メモリリークが発生しているかどうかを確認し、メモリリークの原因を特定し、できるだけ早く問題に対処できます。
高いメモリ使用量:GC ログは、ヒープメモリ使用量とオブジェクト分布を含む、アプリケーションのメモリ使用量を示しています。 GC ログを分析することで、大量のメモリ領域を占有しているオブジェクトに基づいてメモリ使用量を削減できます。
GC パフォーマンス関連の問題:GC ログは、GC トリガーの原因、GC の頻度、GC の期間など、GC に関する情報を提供します。 GC ログを分析することで、GC の頻度や GC の期間など、GC に関するパフォーマンス情報を取得できます。 GC の頻度が高いか、GC の期間が長い場合、アプリケーションのパフォーマンスに影響を与える可能性があります。 また、GC パフォーマンスに関連する問題の原因を特定し、GC ログを使用して問題に対処することもできます。
GC ポリシーの選択:JVM は、Mark-Sweep、Copying、Mark-Compact など、複数の GC アルゴリズムを提供します。 GC ログの分析により、各 GC アルゴリズムのパフォーマンスを評価し、適切な GC ポリシーを選択できます。 これにより、アプリケーションのパフォーマンスと安定性が向上します。
データフロー
次の図は、GC ログのデータフローを示しています。
手順
Simple Log Service コンソール にログオンします。
[ログアプリケーション] セクションで、[インテリジェント O&M] タブをクリックします。 次に、[Full-stack Observability] をクリックします。
[Simple Log Service Full-stack Observability] ページで、管理するインスタンスをクリックします。
左側のナビゲーションウィンドウで、[フルスタックモニタリング] をクリックします。
インスタンスでパフォーマンスモニタリングを初めて使用する場合は、[有効化] をクリックします。
左側のナビゲーションウィンドウで、[データ収集] をクリックします。 [データインポート構成] ページで、[JVM モニタリング] セクションの [GC ログ分析] をオンにします。
ホストモニタリングデータの Logtail 構成を初めて作成する場合は、スイッチをオンにして構成ページに移動します。 Logtail 構成を作成した場合は、
アイコンをクリックして構成ページに移動します。
マシングループを作成して選択します。
マシングループの作成方法の詳細については、「マシングループ」をご参照ください。
[Logtail 構成] ステップで、パラメーターを構成し、[次へ] をクリックします。
Logtail 構成の作成方法の詳細については、「Logtail 構成の管理」をご参照ください。
設定を構成した後、Simple Log Service は、Metricstore などのアセットを自動的に作成します。 詳細については、「アセット」をご参照ください。
GC メトリック
次の GC メトリックは、Simple Log Service の Scheduled SQL 機能を使用して生成されます。
GC メトリックは、時間と領域に基づいて分類されます。
時間ベースの GC メトリック:各 GC サブフェーズの期間と GC フェーズの合計期間を指定します。
領域ベースの GC メトリック:各 GC フェーズの前後の各領域のサイズと、各領域の領域昇格の変更を指定します。
時間
GC スレッドの CPU 時間 (GC_CPU_USED)
ラベル | 説明 |
instance_id | インスタンス ID。 |
gc_type | GC タイプ。 例:G1、CMS、ZGC。 |
type | GC 期間のタイプ。 有効な値:
|
GC 一時停止時間 (GC_PAUSE_TIME)
GC プロセス中、特定のスレッドは同時に実行され、アプリケーションには影響しません。 一時停止時間は、期間から同時実行時間を差し引くことによって計算されます。 GC の一時停止時間はアプリケーションに影響します。
ラベル | 説明 |
instance_id | インスタンス ID。 |
gc_type | GC アルゴリズム。 有効な値:
|
type | GC タイプ。 有効な値:
|
GC サブフェーズ時間 (GC_SUBPHASE_TIME)
ラベル | 説明 |
instance_id | インスタンス ID。 |
gc_type | GC アルゴリズム。 有効な値:
|
type | GC タイプ。 有効な値:
|
subphase | GC サブフェーズの名前。
|
GC 時間 (GC_COST_TIME)
ラベル | 説明 |
instance_id | インスタンス ID。 |
gc_type | GC タイプ。 有効な値:
|
領域
GC 前のメモリ (BEFORE_GC_REGION_SIZE)
ラベル | 説明 |
instance_id | インスタンス ID |
gc_type | GC タイプ。
|
type | 領域名。
|
GC 後のメモリ (AFTER_GC_REGION_SIZE)
ラベル | 説明 |
instance_id | インスタンス ID。 |
gc_type | GC タイプ。
|
type | 領域名。
|
昇格サイズ (GC_PROMOTION)
ラベル | 説明 |
インスタンス ID | インスタンス ID です。 |
gc_type | GC の種類。
|
手順 3: アプリケーションをテストする
詳細については、「ダッシュボードを表示する」をご参照ください。