影響RabbitMQ性能的因素有不少,主要的分爲硬件性能與軟件性能。算法
)硬件性能:如網絡、內存、CPU等等。網絡
)軟件性能:消息持久化、消息確認、路由算法與綁定規則、投遞消息等等。性能
一、消息持久化:持久化會寫入磁盤,多一次IO操做,設置非持久化可提高性能。spa
二、消息確認:消費者訂閱隊列時,設置自動確認也能夠提高性能。code
三、路由算法與綁定規則:fanout,只要綁定了交換器就能夠匹配到,匹配規則少,性能確定是綁定規則中最佳的;direct,除了交換器還須要匹配路由鍵,性能次之;topic,最複雜的匹配規則,相對其它兩個性能最差。blog
四、投遞消息索引
)隊列結構:接口
消息一般由兩部分組成,rabbit_amqqueue_process和backing_queue。rabbitmq
一、rabbit_amqqueue_process:負責協議相關的消息處理,即接受生產者發佈的消息、消息的投遞、處理消息的確認等等。隊列
二、backing_queue:消息存儲的具體形式和引擎,並向rabbit_amqqueue_process提供相關接口。
)消息在隊列中的狀態:
一、alpha:消息內容、索引全在內存中。
二、beta:內容在磁盤,索引在內存。
三、gamma:內容在磁盤,索引在內存和磁盤都有(只有持久化的消息纔會處理此狀態)。
四、delta:內容和索引全在磁盤中。
)內存:
RabbitMQ內存閥值默認爲40%,能夠經過修改rabbitmq.conf文件(/etc/rabbitmq/rabbitmq.conf)來配置內存閥值。
# 內存閥值
[{rabbit, [{vm_memory_high_watermark, 0.4}]}]
# 內存閥值絕對值,單位B
[{rabbit, [{vm_memory_high_watermark, {absolute, 104857600}}]}]
# 內存閥值絕對值,自定義單位
[{rabbit, [{vm_memory_high_watermark, {absolute, "1000MB"}}]}]
固然你也能夠經過命令
# 對應rabbitmqctl命令(fraction對應配置中的0.4): rabbitmqctl set_vm_memory_high_watermark {fraction} # rabbitmqctl命令指定內存閾值絕對值 rabbitmqctl set_vm_memory_high_watermark absolute {memory_limit)
)磁盤:
# rabbitmq.config配置文件命令 [{rabbit, [{disk_free_limit, "1GB"}]}] # 設置磁盤閾值的絕對值 rabbitmqctl set_disk_free_limit {disk_limit} # 設置機器內存大小與磁盤閾值的比值 rabbitmqctl set_disk_free__limit_mem_relative {fraction}