OpenJDK 8 での Shenandoah ガベージコレクターの使用
ガイド
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ を参照してください。
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに関するご意見やご感想をお寄せください。フィードバックをお寄せいただくには、ドキュメントのテキストを強調表示し、コメントを追加できます。
このセクションでは、フィードバックの送信方法を説明します。
前提条件
- Red Hat カスタマーポータルにログインしている。
- Red Hat カスタマーポータルで、マルチページ HTML 形式でドキュメントを表示している。
手順
フィードバックを提供するには、以下の手順を実施します。
ドキュメントの右上隅にある Feedback ボタンをクリックして、既存のフィードバックを確認します。
注記フィードバック機能は、Multi-page HTML 形式でのみ有効です。
- フィードバックを提供するドキュメントのセクションを強調表示します。
強調表示されたテキスト近くに表示される Add Feedback ポップアップをクリックします。
ページの右側のフィードバックセクションにテキストボックスが表示されます。
テキストボックスにフィードバックを入力し、Submit をクリックします。
ドキュメントに関する問題が作成されます。
- 問題を表示するには、フィードバックビューで問題トラッカーリンクをクリックします。
第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
-
hugetlbfsLinux サポートを有効にします。 - -XX:+UseTransparentHugePages
-
Huge Page を透過的に有効にします。透過的な Huge Page では、
/sys/kernel/mm/transparent_hugepage/enabledと/sys/kernel/mm/transparent_hugepage/defragをmadviseに設定することを推奨します。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