OpenJDK 8 での Shenandoah ガベージコレクターの使用

OpenJDK 8

ガイド

概要

OpenJDK は、Red Hat Enterprise Linux プラットフォーム上の Red Hat 製品です。OpenJDK 8 での Shenandoah ガベージコレクターの使用ガイドでは、Shenandoah ガベージコレクターの概要と、OpenJDK 8 での設定方法を説明します。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ を参照してください。

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに関するご意見やご感想をお寄せください。フィードバックをお寄せいただくには、ドキュメントのテキストを強調表示し、コメントを追加できます。

このセクションでは、フィードバックの送信方法を説明します。

前提条件

  • Red Hat カスタマーポータルにログインしている。
  • Red Hat カスタマーポータルで、マルチページ HTML 形式でドキュメントを表示している。

手順

フィードバックを提供するには、以下の手順を実施します。

  1. ドキュメントの右上隅にある Feedback ボタンをクリックして、既存のフィードバックを確認します。

    注記

    フィードバック機能は、Multi-page HTML 形式でのみ有効です。

  2. フィードバックを提供するドキュメントのセクションを強調表示します。
  3. 強調表示されたテキスト近くに表示される Add Feedback ポップアップをクリックします。

    ページの右側のフィードバックセクションにテキストボックスが表示されます。

  4. テキストボックスにフィードバックを入力し、Submit をクリックします。

    ドキュメントに関する問題が作成されます。

  5. 問題を表示するには、フィードバックビューで問題トラッカーリンクをクリックします。

第1章 Shenandoah ガベージコレクター

Shenandoah は、実行中の Java プログラムと同時にガべージコレクションを実行することで、GC の一時停止時間が短縮する低一時停止時間ガベージコレクター (GC) です。OpenJDK 8 のデフォルトのガベッジコレクター (CMS) および G1 の同時マークは、ライブオブジェクトの同時マークを実行します。

Shenandoah は同時圧縮を追加します。実行中の Java スレッドと同時にオブジェクトを圧縮することで、GC 一時停止時間が短縮されます。Shenandoah による一時停止時間はヒープサイズから独立しています。つまり、ヒープが 200 MB または 200 GB の場合でも、一貫性のある一時停止時間が得られます。Shenandoah は、応答性と予測可能な短い一時停止を必要とするアプリケーションのアルゴリズムです。詳細は、Shenandoah: A Low-Pause-Time Gabage Collector を参照してください。

第2章 Shenandoah ガベージコレクターを使用した Java アプリケーションの実行

Shenandoah ガベージコレクター (GC) を使用して Java アプリケーションを実行できます。

前提条件

  • OpenJDK がインストールされていること。

手順

  • -XX:+UseShenandoahGC JVM オプションを使用して、Shenandoah GC で Java アプリケーションを実行します。

    $ java <PATH_TO_YOUR_APPLICATION> -XX:+UseShenandoahGC

第3章 Shenandoah ガベージコレクターモード

Shenandoah は 3 つの異なるモードで実行できます。-XX:ShenandoahGCMode=<name> を指定して、特定のモードを選択します。以下の一覧では、各 Shenandoah モードを説明します。

normal/satb (製品、デフォルト)
このモードは、Snapshot-At-The-playning (SATB) マーキングで同時ガベージコレクター (GC) を実行します。このマーキングモードは、OpenJDK 8 のデフォルトのガベッジコレクターである G1 と同様に機能します。
iu (実験的)
このモードは、Incremental Update (IU) マーキングで同時 GC を実行します。これにより、より強固なメモリーを回収できます。このマーキングモードは SATB モードをミラーリングします。これにより、特に弱い参照へのアクセスに関して、保持性が低くなります。
passive (診断)
このモードでは、Stop the World Event GCs を実行します。このモードは機能テストに使用されますが、GC バリアーでパフォーマンスの異常を分けたり、アプリケーションで実際のライブデータサイズを把握したりするのに便利です。

第4章 Shenandoah ガベッジコレクターの基本設定オプション

Shenandoah ガベージコレクター (GC) には、以下の基本的な設定オプションがあります。

-Xlog:gc
個別の GC タイミングを出力します。
-Xlog:gc+ergo
ヒューリスティックな決定を出力します。これにより、外れ値が明らかになることがあります。
-Xlog:gc+stats

実行の最後に Shenandoah 内部タイミングでサマリーテーブルを出力します。

これは、ロギングが有効な状態で実行することが最適です。このサマリー表は、GC パフォーマンスに関する重要な情報を通知します。ヒューリスティックログは、GC の外れ値を判断するのに便利です。

-XX:+AlwaysPreTouch
ヒープページをメモリーにコミットし、レイテンシーの問題を減らすのに役立ちます。
-Xms および -Xmx
-Xms = -Xmx でヒープをサイズ変更不可にすると、ヒープ管理が容易になります。AlwaysPreTouch では、-Xms = -Xmx は起動時にすべてのメモリーをコミットします。これにより、メモリーが最後に使用されたときに問題が発生するのを回避します。-Xms は、メモリーアンコミットの低境界も定義するため、-Xms = -Xmx はすべてコミットされたままになります。フットプリントを低く設定するために Shenandoah を設定する場合は、-Xms を低く設定することが推奨されます。コミット/コミット解除のオーバーヘッドとメモリーフットプリントのバランスを取るために、どの程度低く設定するかを決める必要があります。多くの場合、-Xms は自由裁量で低く設定できます。
-XX:+UseLargePages
hugetlbfs Linux サポートを有効にします。
-XX:+UseTransparentHugePages
Huge Page を透過的に有効にします。透過的な Huge Page では、/sys/kernel/mm/transparent_hugepage/enabled/sys/kernel/mm/transparent_hugepage/defragmadvise に設定することを推奨します。AlwaysPreTouch で実行すると、起動時に defrag ツールツールの負荷を負うことになります。
-XX:+UseNUMA
Shenandoah はまだ NUMA を明示的にサポートしていませんが、マルチソケットホストで NUMA インターリービングを有効にすることが推奨されます。AlwaysPreTouch と組み合わせることで、デフォルトの設定よりも優れたパフォーマンスが得られます。
-XX:-UseBiasedLocking
競合のない (バイアス) ロックスループットにはトレードオフがあり、JVM がそれらを有効または無効にする安全なポイントがあります。レイテンシー指向のワークロードの場合は、バイアスロックをオフにします。
-XX:+DisableExplicitGC
ユーザーコードから System.gc() を呼び出すと、Shenandoah に追加の GC サイクルの実行が強制されます。-XX:+ExplicitGCInvokesConcurrent がデフォルトで有効になるため、通常は問題はありません。つまり、STW Full GC ではなく、同時 GC サイクルが呼び出されることを意味します。

改定日時: 2021-11-28 22:22:43 +1000