談談Activemq的儲存機制
阿新 • • 發佈:2019-01-05
mq的訊息儲存有三個地方,分別是:mq代理的記憶體空間、持久儲存區、臨時儲存區。對應引數為:
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="2gb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
其中,memoryUsage是mq的訊息儲存計數,它統計了mq中訊息佔用jvm記憶體情況。storeUsage是當訊息設定為persistent模式時的儲存空間。
tempUsage是non persistent時的訊息儲存空間。訊息進入mq後,首先會佔用memoryUsage,persistent模式下,訊息總是會被另外儲存於指定介質(預設KahaDB),如果non persistent,當訊息佔用記憶體量超過memoryUsage的70%(預設值,可調整),則訊息會被交換到臨時區域(如果預設FileCursor,則會以檔案形式儲存於磁碟空間),這個交換過程會很慢,所以如果這種情況頻繁存在,設定PFC很有必要了。如果訊息的消費能力有限,tempUsage可以設定大一些,不然很容易出現tempusage超限情況。還有一點要注意,tempusage不能小於32m,而且最好還要大於memoryUsage,不然對於情況1,轉存單個檔案預設大小32M,寫檔案還未完成tempusage已經超限了,情況2也可能會出現記憶體的訊息還未完全交換到temp區,tempusage已經超限的情況。
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="2gb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
其中,memoryUsage是mq的訊息儲存計數,它統計了mq中訊息佔用jvm記憶體情況。storeUsage是當訊息設定為persistent模式時的儲存空間。
tempUsage是non persistent時的訊息儲存空間。訊息進入mq後,首先會佔用memoryUsage,persistent模式下,訊息總是會被另外儲存於指定介質(預設KahaDB),如果non persistent,當訊息佔用記憶體量超過memoryUsage的70%(預設值,可調整),則訊息會被交換到臨時區域(如果預設FileCursor,則會以檔案形式儲存於磁碟空間),這個交換過程會很慢,所以如果這種情況頻繁存在,設定PFC很有必要了。如果訊息的消費能力有限,tempUsage可以設定大一些,不然很容易出現tempusage超限情況。還有一點要注意,tempusage不能小於32m,而且最好還要大於memoryUsage,不然對於情況1,轉存單個檔案預設大小32M,寫檔案還未完成tempusage已經超限了,情況2也可能會出現記憶體的訊息還未完全交換到temp區,tempusage已經超限的情況。