本文從本人部落格搬運,原文格式更加美觀,可以移步原文閱讀:RabbitMQ記憶體與磁盤相關配置
記憶體相關配置
1.限制最大可用記憶體
預設情況下,當生産者将消息發送到RabbitMQ的時候,隊列中的消息會盡可能的存儲在記憶體之中,這樣可以更加快速的将消息發送給消費者。即使是持久化的消息,在被寫入磁盤的同時也會在記憶體中駐留一份備份
我們可以配置允許rabbitmq使用的最大記憶體是多少,當達到最大記憶體時,rabbitmq将會阻塞生産者繼續發送消息給它
rabbitmq有2種方式可以限制其最大可用記憶體,我們可以根據實際情況選擇一種。可以在配置檔案
/etc/rabbitmq/rabbitmq.conf
中進行配置:
- 相對值:mq可用所在實體機器的記憶體的比例,配置項為
,預設0.4。建議配置為0.4~0.7之間vm_memory_high_watermark.relative
- 絕對值:mq可用所在實體機器的記憶體的絕對量,配置項為
vm_memory_high_watermark.absolute
vm_memory_high_watermark.relative = 0.4
vm_memory_high_watermark.absolute = 2GB
預設情況下rabbitmq将會采用相對值配置,并且預設的 vm_memory_high_watermark.relative = 0.4
2.記憶體換頁
當rabbitmq使用的記憶體量快到達我們配置的極限之前,它會嘗試将隊列中的消息從記憶體中換頁到磁盤以釋放記憶體空間。持久和非持久的消息都會被換頁到磁盤中,其中持久化的消息本身在磁盤中就有一個副本,是以在換頁轉移的過程中持久化的消息會先從記憶體中被清除。這就是所謂的記憶體換頁
記憶體換頁在配置檔案
/etc/rabbitmq/rabbitmq.conf
中對應的配置項為
vm_momery_high_watermark_paging_ratio
,其含義是當rabbitmq使用的記憶體量達到我們配置的上限的多少比例時,将同等比例記憶體量的消息換頁到磁盤中。其預設值是0.5
vm_momery_high_watermark_paging_ratio = 0.5
假設rabbitmq所在實體機器的記憶體為1000MB,
vm_memory_high_watermark.relative=0.4
,
vm_momery_high_watermark_paging_ratio=0.5
。那麼當rabbitmq使用的記憶體量達到1000*0.4*0.5=200MB時,就會将200MB的消息從記憶體換頁到磁盤中
當RabbitMQ進行記憶體換頁的時候,會耗費較長的時間,也會阻塞隊列的操作,進而無法接收新的消息
磁盤相關配置
我們可以配置rabbitmq的磁盤空間預警,當剩餘磁盤空間低于某個門檻值時,rabbitmq将會阻塞生産者繼續發送消息,并且觸發預警。可以有2種配置方式,可以在
/etc/rabbitmq/rabbitmq.conf
中進行配置:
- 絕對值:磁盤空間低于該絕對值時觸發,對應配置項為
,預設值為50disk_free_limit.absolute
- 相對值:相對于最大記憶體比例,磁盤空間低于換算後的值時觸發,對應配置項為
。比如配置為3時,磁盤空間低于最大記憶體的3倍時觸發disk_free_limit.relative
disk_free_limit.absolute = 50MB
disk_free_limit.relative = 3.0
預設情況下rabbitmq将會采用絕對值配置,并且預設的 disk_free_limit.absolute = 50MB
預設配置驗證
在記憶體4G的虛拟機上運作一個RabbitMQ容器,觀察其記憶體與硬碟的預設配置。可以發現其記憶體限制為1.5G,約為最大記憶體的0.4倍。并且磁盤空間預警絕對值為48MB