JVM/OS 設定
このセクションでは、システム (JVM/OS) 関連の設定について説明します。
1.JVM オプション
JDK 1.8 の最新リリースを推奨します。パフォーマンスを向上させるために、Xms と Xmx の値を同じに設定して、JVM がヒープサイズを調整しないようにします。本番環境の JVM 設定は次のとおりです。
-server -Xms8g -Xmx8g -Xmn4g
JVM がデフォルトで 8 バイトアラインメントされている場合、最大ヒープメモリは 32 GB を超えないようにすることをお勧めします。そうしないと、JVM のポインター圧縮テクノロジーが影響を受け、メモリが無駄になります。
RocketMQ Broker の起動時間を気にしない場合は、Java ヒープを「プリタッチ」して、JVM の初期化中にすべてのページが割り当てられるようにすることをお勧めします。起動時間を気にしない場合は、有効にすることができます。
-XX:+AlwaysPreTouch
バイアスロックを無効にすると、JVM の一時停止が減少する可能性があります。
-XX:-UseBiasedLocking
ガベージコレクションには、JDK 1.8 に付属の G1 コレクターを使用することをお勧めします。
-XX:+UseG1GC
-XX:G1HeapRegionSize=16m
-XX:G1ReservePercent=25
-XX:InitiatingHeapOccupancyPercent=30
これらの GC オプションは積極的すぎるように見えるかもしれませんが、本番環境では優れたパフォーマンスを発揮することが証明されています。
また、-XX:MaxGCPauseMillis の値を小さく設定しすぎないでください。そうしないと、JVM はこの目標を達成するために小さな Young 世代を使用し、非常に頻繁に Minor GC が発生するため、ローリング GC ログファイルが推奨されます。
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=30m
GC ファイルへの書き込みによってエージェントのレイテンシが増加する場合は、GC ログファイルをメモリ内ファイルシステムにリダイレクトすることを検討してください。
-Xloggc:/dev/shm/mq_gc_%p.log123
2.Linux カーネルパラメータ
os.sh スクリプトは、bin フォルダーに多くのカーネルパラメーターをリストしています。これらを少し変更して、本番環境で使用できます。次のパラメーターに注意してください。詳細については、/proc/sys/vm/* のドキュメントを参照してください。
- vm.extra_free_kbytes バックグラウンドの再利用 (kswapd) が開始されるしきい値と、直接再利用されるしきい値 (プロセスを割り当てることによって) の間に、追加の利用可能なメモリを保持するように VM に指示します。RocketMQ はこのパラメーターを使用して、メモリ割り当ての長い遅延を回避します。(カーネルバージョンによって異なります)
- vm.min_free_kbytes 1024 KB 未満に設定すると、システムが微妙に壊れ、高負荷時にシステムがデッドロックを起こしやすくなります。
- vm.max_map_count プロセスが持つことができるメモリマップされた領域の最大数を制限します。RocketMQ は MMAP を使用して CommitLog と ConsumeQueue をロードするため、このパラメーターを大きな値に設定することをお勧めします。
- vm.swappiness カーネルがメモリページをスワップする積極性を定義します。値が大きいほど積極性が高くなり、値が小さいほど交換量が減少します。交換の遅延を回避するために、値 10 をお勧めします。
- **ファイル記述子の制限** RocketMQ は、ファイル (CommitLog および ConsumeQueue) とネットワーク接続用にファイル記述子を開く必要があります。ファイル記述子の値を 655350 に設定することをお勧めします。
- ディスクスケジューラ RocketMQ は、要求に対して保証された遅延を提供しようとする I/O デッドラインスケジューラの使用を推奨します。