跳至主要內容
版本:5.0

JVM/OS 設定

本節重點在於系統 (JVM/OS) 相關設定。

1.JVM 選項

建議使用 JDK 1.8 的最新版本。透過設定相同的 Xms 和 Xmx 值,可防止 JVM 調整堆積大小以提升效能。生產環境的 JVM 設定如下

-server -Xms8g -Xmx8g -Xmn4g 

當 JVM 預設為 8 位元組對齊時,建議最大堆積記憶體不要超過 32 G。否則,會影響 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 將使用較小的新生代來達成此目標,這將導致非常頻繁的輕微 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 告知 VM 在背景回收 (kswapd) 開始的閾值和直接回收 (由配置程序分配) 的閾值之間保持額外可用的記憶體。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 截止排程程式,它嘗試為要求提供保證的延遲。