更新時(shí)間:2021-09-15 11:10:30 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2974次
RabbitMQ的性能可以從哪些方面進(jìn)行優(yōu)化呢?小編來(lái)告訴大家。
rabbitmq.config文件時(shí)rabbitmq的配置文件,他遵守Erlang配置文件定義。 rabbitmq.config文件位置:
Unix $RABBITMQ_HOME/etc/rabbitmq
Windows %APPDATA%\RabbitMQ\
例子如下:
[
{mnesia, [{dump_log_write_threshold, 1000}]},
{rabbit, [{tcp_listeners, [5673]}]}
].
RabbitMQ在使用當(dāng)前機(jī)器的40%以上內(nèi)存時(shí)候,會(huì)發(fā)出內(nèi)存警告,并組織RabbitMQ所有連接(producer連接)。直到RabbitMQ將當(dāng)前數(shù)據(jù)刷入到硬盤或者消息被客戶端消費(fèi)。
當(dāng)Erlang的垃圾回收機(jī)制運(yùn)行起來(lái)(這是一個(gè)非常耗費(fèi)資源的工作),會(huì)消費(fèi)兩倍內(nèi)存。(默認(rèn)是80%的內(nèi)存)。因此需要操作系統(tǒng)支持OS swap和page file.
注意:在32為架構(gòu)下,每個(gè)進(jìn)程被限制為2GB。通常64架構(gòu)系統(tǒng)限制每個(gè)進(jìn)程為256TB,64位windows限制為8TB。就算在64位操作系統(tǒng)下,32位的進(jìn)程只能用2GB內(nèi)存。 因此強(qiáng)烈推薦使用64bit Erlang vm和64bit os。
當(dāng)RabbitMQ不能識(shí)別你的系統(tǒng)的時(shí)候,你必須對(duì)vm_memory_high_watermark進(jìn)行修改。 當(dāng)rabbitmq不能識(shí)別系統(tǒng)的時(shí)候,會(huì)設(shè)置內(nèi)存為1024MB。所以rabbitmq實(shí)際使用的內(nèi)存僅僅410MB。 當(dāng)系統(tǒng)為8GB的時(shí)候,我們可以這是vm_memory_high_watermark=3,那么我們實(shí)際可以使用的內(nèi)存為3GB。
默認(rèn)配置RabbitMQ的vm_memory_high_watermark=0.4
[{rabbit, [{vm_memory_high_watermark, 0.4}]}].
舉例說(shuō)明:
當(dāng)機(jī)器內(nèi)存為16GB,那么40%,為6.4GB。主要當(dāng)32系統(tǒng)時(shí)候,實(shí)際可以使用的內(nèi)存為2GB,那么實(shí)際可以使用的內(nèi)存為820MB。
當(dāng)我配置vm_memory_high_watermark=0 我們可以阻止所有消息發(fā)送。
注意:這個(gè)百分比,最好不要修改。應(yīng)為Erlang VM回收的時(shí)候會(huì)占據(jù)系統(tǒng)內(nèi)存的80%。已經(jīng)達(dá)到系統(tǒng)臨界區(qū)。不要設(shè)置超過(guò)50%的百分比。
當(dāng)內(nèi)存中的數(shù)據(jù)達(dá)到一定數(shù)量后,他需要被page out出來(lái)。 默認(rèn)配置 vm_memory_high_watermark_paging_ratio=0.5。也就是vm_memory_high_watermark0.5。假設(shè)總內(nèi)存8GB,0.4的使用內(nèi)存是3.2。那么當(dāng)內(nèi)存叨叨3.20.5=1.6GB時(shí)候,系統(tǒng)將會(huì)大量置換頁(yè)面。
因此我們可以將頁(yè)面置換的百分比調(diào)高。設(shè)置為0.75
[{rabbit, [{vm_memory_high_watermark_paging_ratio, 0.75},
{vm_memory_high_watermark, 0.4}]}].
注意:我們可以將vm_memory_high_watermark_paging_ratio設(shè)置超過(guò)1.0,那么不會(huì)發(fā)生內(nèi)存換頁(yè)的情況,也就是說(shuō),當(dāng)內(nèi)存超過(guò)總內(nèi)存的40%之后,將會(huì)阻止所有producer產(chǎn)生消息。
配置命令
rabbitmqctl set_vm_memory_high_watermark 0.4
這是內(nèi)存使用占總內(nèi)存數(shù)的百分比
rabbitmqctl set_vm_memory_high_watermark_paging_ratio 0.75
設(shè)置rabbitmq使用內(nèi)存達(dá)到rabbitmq可用內(nèi)存百分比,就出發(fā)頁(yè)面交換功能。
rabbitmqctl status
獲得系統(tǒng)配置。
RabbitMQ會(huì)在硬盤空間不夠的時(shí)候,阻止Producer發(fā)送消息。這樣可以保證RabbitMQ可以再任何時(shí)候,將內(nèi)存中的數(shù)據(jù)置換到磁盤中來(lái)。通常會(huì)將硬盤剩余數(shù)據(jù)大小設(shè)置為機(jī)器的總內(nèi)存大小。
全局流控制會(huì)被觸發(fā),當(dāng)可用總硬盤容量已經(jīng)低于配置信息。broker數(shù)據(jù)庫(kù)將會(huì)最少10秒檢查一下警告是否發(fā)出或者清除。
在RabbitMQ啟動(dòng)的后,會(huì)打印disk limit限制,但是不能識(shí)別的平臺(tái)就不能顯示信息。
注意:當(dāng)RabbitMQ是集群情況下,當(dāng)其中有一臺(tái)機(jī)器硬盤不足的時(shí)候,所有節(jié)點(diǎn)的producer鏈接都會(huì)被阻止。
RabbitMQ會(huì)定期價(jià)檢查總磁盤可用空間的大小。通常時(shí)間為10秒每次,當(dāng)限制快被達(dá)到時(shí)候,RabbitMQ檢查的時(shí)候會(huì)達(dá)到10次/s.
配置Disk Free Space Limit
我們可以直接設(shè)置硬盤的最小限制。也可以設(shè)置相對(duì)內(nèi)存大小的設(shè)置。
先設(shè)置磁盤1GB限制
[{rabbit, [{disk_free_limit, 1000000000}]}].
在這時(shí)相對(duì)于機(jī)器總內(nèi)存
[{rabbit, [{disk_free_limit, {mem_relative, 1.0}}]}].
Erlang的Hipe優(yōu)化
可以設(shè)置hipe_compiles設(shè)置??梢钥吹接?0-50%的性能優(yōu)化。而你只需要付出1分鐘左右的延遲啟動(dòng)。 HiPE需要你檢查是否編譯進(jìn)入你的Erlang安裝環(huán)境。Ubuntu,需要安裝erlang-base-hipe.默認(rèn)有些平臺(tái)不支持。如果Erlang VM segfaults,請(qǐng)關(guān)閉這個(gè)選項(xiàng)。
[{rabbit, [{hipe_compile, true}]}].
通過(guò)上述相信大家對(duì)“RabbitMQ性能優(yōu)化”已經(jīng)有所了解,想學(xué)習(xí)更多關(guān)于Java的知識(shí)可以關(guān)注動(dòng)力節(jié)點(diǎn)Java在線學(xué)習(xí),里面有更多更詳細(xì)的內(nèi)容供大家學(xué)習(xí),希望對(duì)想學(xué)習(xí)Java的朋友能夠有所幫助。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)