RocketMQ性能優化【實戰筆記】


 

一、系統優化
1.最大文件數 2.系統參數調整 二、RocketMQ性能調優 1.開啟異步刷盤 2.開啟堆外內存設置 3.開啟文件預熱 4.開啟Slave讀權限 5.關閉堆內存據傳輸
一、系統優化
1.最大文件數

limits.conf 設置用戶能打開的最大文件數

vim /etc/security/limits.conf # End of file baseuser soft nofile 655360 baseuser hard nofile 655360 * soft nofile 655360 * hard nofile 655360
2.系統參數調整
vim /etc/sysctl.conf vm.overcommit_memory=1 vm.drop_caches=1 vm.zone_reclaim_mode=0 vm.max_map_count=655360 vm.dirty_background_ratio=50 vm.dirty_ratio=50 vm.dirty_writeback_centisecs=360000 vm.page-cluster=3 vm.swappiness=1 sysctl -p
參數說明
 
1.overcommit_memory
是否允許內存的過量分配
當為0的時候,當用戶申請內存的時候,內核會去檢查是否有這么大的內存空間
當為1的時候,內核始終認為,有足夠大的內存空間,直到它用完了為止 當為2的時候,內核禁止任何形式的過量分配內存
2.drop_caches
寫入的時候,內核會清空緩存,騰出內存來,相當於sync
寫1的時候,會清空頁緩存,就是文件
寫2的時候,會清空inode和目錄樹 寫3的時候,都清空 This is a non-destructive operation and will only free things that are completely unused. Dirty objects will continue to be in use until written out to disk and are not freeable. If you run "sync" first to flush them out to disk, these drop operations will tend to free more memory.
3.zone_reclaim_mode
如果為0的話,那么系統會傾向於從其他節點分配內存
如果為1的話,那么系統會傾向於從本地節點回收Cache內存多數時候
4.max_map_count
定義了一個進程能擁有的最多的內存區域,默認為65536
5.dirty_background_bytes/dirty_background_ratio
當dirty cache到了多少的時候,就啟動pdflush進程,將dirty cache寫回磁盤
當有dirty_background_bytes存在的時候,dirty_background_ratio是被自動計算的
6.dirty_bytes/dirty_ratio
當一個進程的dirty cache到了多少的時候,啟動pdflush進程,將dirty cache寫回磁盤
當dirty_bytes存在的時候,dirty_ratio是被自動計算的
7.dirty_writeback_centisecs
pdflush每隔多久,自動運行一次(單位是百分之一秒)
8.page-cluster
每次swap in或者swap out操作多少內存頁為2的指數。等於0的時候,為1頁;等於1的時候,為2頁;等於2的時候,為4頁
9.swappiness
swappiness=0 僅在內存不足的情況下,當剩余空閑內存低於vm.min_free_kbytes limit時,使用交換空間 swappiness=1 內核版本3.5及以上、Red Hat內核版本2.6.32-303及以上,進行最少量的交換,而不禁用交換 swappiness=10 當系統存在足夠內存時,推薦設置為該值以提高性能 swappiness=60 默認值 swappiness=100 內核將積極的使用交換空間
二、RocketMQ性能調優

線上RocketMQ的JVM未做調優,堆內存使用8G;主要從RocketMQ配置參數方面梳理下。

1.開啟異步刷盤
flushDiskType=ASYNC_FLUSH
同步刷盤TPS過低,較難滿足業務發展需求
2.開啟堆外內存設置
transientStorePoolEnable=true 消息寫入到堆外內存,消費時從pageCache消費,讀寫分離,提升集群性能
3.開啟文件預熱
warmMapedFileEnable=true 開啟文件預熱,避免日志文件在分配內存時缺頁中斷
4.開啟Slave讀權限

slaveReadEnable=true
消息占用物理內存的大小通過accessMessageInMemoryMaxRatio來配置默認為40%;如果消費的消息不在內存中,開啟slaveReadEnable時會從slave節點讀取;提高Master內存利用率

5.關閉堆內存據傳輸
transferMsgByHeaptrue設置為false Broker響應消費請求時,不必將數據重新讀到堆內存再發送給客戶端;直接從PageCache將數據發送給客戶端


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM