天天看點

RabbitMQ記憶體與磁盤相關配置記憶體相關配置磁盤相關配置預設配置驗證

本文從本人部落格搬運,原文格式更加美觀,可以移步原文閱讀:RabbitMQ記憶體與磁盤相關配置

記憶體相關配置

1.限制最大可用記憶體

預設情況下,當生産者将消息發送到RabbitMQ的時候,隊列中的消息會盡可能的存儲在記憶體之中,這樣可以更加快速的将消息發送給消費者。即使是持久化的消息,在被寫入磁盤的同時也會在記憶體中駐留一份備份

我們可以配置允許rabbitmq使用的最大記憶體是多少,當達到最大記憶體時,rabbitmq将會阻塞生産者繼續發送消息給它

rabbitmq有2種方式可以限制其最大可用記憶體,我們可以根據實際情況選擇一種。可以在配置檔案

/etc/rabbitmq/rabbitmq.conf

中進行配置:

  • 相對值:mq可用所在實體機器的記憶體的比例,配置項為

    vm_memory_high_watermark.relative

    ,預設0.4。建議配置為0.4~0.7之間
  • 絕對值: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

中進行配置:

  • 絕對值:磁盤空間低于該絕對值時觸發,對應配置項為

    disk_free_limit.absolute

    ,預設值為50
  • 相對值:相對于最大記憶體比例,磁盤空間低于換算後的值時觸發,對應配置項為

    disk_free_limit.relative

    。比如配置為3時,磁盤空間低于最大記憶體的3倍時觸發
disk_free_limit.absolute = 50MB
disk_free_limit.relative = 3.0
           
預設情況下rabbitmq将會采用絕對值配置,并且預設的

disk_free_limit.absolute = 50MB

預設配置驗證

在記憶體4G的虛拟機上運作一個RabbitMQ容器,觀察其記憶體與硬碟的預設配置。可以發現其記憶體限制為1.5G,約為最大記憶體的0.4倍。并且磁盤空間預警絕對值為48MB

RabbitMQ記憶體與磁盤相關配置記憶體相關配置磁盤相關配置預設配置驗證