第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/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 サイクルが呼び出されることを意味します。
改訂日時: 2024-05-04