AppleはGCGCをオープンソース化した。これは、Python 3とpandasをベースとしたJavaガベージコレクター(GC)ログの視覚化のためのツールである。
GCGCは、Jupyterノートブックを使って、GCログファイルを分析、視覚化する。分析用のノートブックが用意されており、収集されたGC情報からプロットとテーブルが生成される。
ノートブックの最初のセルが実行されると、ログファイルは行ごとに読み取られ、Pythonファイルで定義された正規表現に従って解析される。次に、pandasのデータフレームが作成され、そこに情報が保存される。
データの分析は、列に一致するすべての値を1つの場所にグループ化し、次に条件に基づいてデータフレームから行をフィルタリングすることによって実行される。その後、残りのデータが処理され、プロットされる。ノートブックを使うと、データをさらにフィルタリング、グループ化、そして、他にも手動で操作することもできる。
17の異なる機能とプロットの一覧が提供される。例えば、プログラム実行中の一時停止、遅延ヒートマップ、GC前後のヒープ、ヒープ割り当て率、一時停止のサマリ、一時停止パーセンタイル、イベント期間の平均と合計などである。
分析を開始するには、いくつかのステップが必要である。まず、JVMでGCログを有効にすることが前提条件となる。Javaアプリケーションのコマンドラインに以下に示すオプションを追加してください。
-Xlog:gc*:./filename.log
GCGCプロジェクトのクローンを作成し、Jupyterノートブックを起動した後、jupyter WebページでGCGC.ipynb
ノートブックを開いてください。
最初のセルでは、GCログファイルのファイルパスと、説明に使用するラベルを設定する必要がある。ワイルドカードを使って、一度に多くのファイルを読み取ることができる。
[セル]メニューから[すべて実行]を押すと、GCGCノートブック分析が実行される。
生成された図の例を次に示す。
ノートブックをpdf、html、markdown、asciidocなどのさまざまな形式でダウンロードすることもできる。
現在、JDK11およびJDK 16からサポートされているガベージコレクターがあるが、ShenandoahコレクターとZGCコレクターにはいくつかの制限がある。実際、Shenandoahではガベージコレクションごとに2つのフェーズが使われ、そのためGCフェーズごとに2つのプロットされた図が作成される。一方、ZGCではセーフポイントの概念が使われている。一時停止時間に類似のメトリックを持っているが、ZGCでは同じ方法ではそれらがレポートされない。そのため、手動で有効にする必要がある。