2011-08-10 4 views
1

私はActiveMQを使用しています。消費者を待っている間、永続化されたメッセージが実際にディスクにスワップされる方法と時期について質問がありますか?ActiveMq、使用されていないメッセージは常にブローカのメモリにありますか?

私は仮想トピックを使用しており、メッセージを受信するキューコンシューマを作成しています。すべてのメッセージはです。です(消費されていないすべてのメッセージのレコードが持続性ストレージに存在することが確認されています)。

私は定期的に複数のコンシューマーを持っています。 jconsoleをactivemqに接続すると、すべてが使用されていないことに気付きましたはブローカのメモリに含まれているようです。彼らはディスクにスワップされません、少なくとも私はそれを確認することができませんでした。 memoryUsageを設定するか、producerFlowControlをオンに設定しても効果はありません。ブローカは、フロー制御をオンにしてmemoryUsage制限に達した場合にブロックされるか、フロー制御がオフの場合にMemoryPercentUsageが増加し続けるかどうかを示します。

正確にactivemqがメッセージをディスク/永続ストレージに保存してメモリを解放するとしたら?それともそうですか?何百万ものメッセージが待ち行列に残っていないときに、ブローカを長期間に制限するRAMではないディスク容量であることを確認するにはどうすればよいですか?

答えて

0

memoryUsageを再チェックしてください。メッセージを持続させるべきさまざまな制限を指定することができます。以下の例では、64 MBのメモリがいっぱいになると、最大100 GBのディスクへの書き込みを開始します。

<systemUsage> 
    <systemUsage> 
    <memoryUsage> 
     <memoryUsage limit="64 mb" /> 
    </memoryUsage> 
    <storeUsage> 
     <storeUsage limit="100 gb" /> 
    </storeUsage> 
    </systemUsage> 
</systemUsage> 
+0

こんにちはKaKa、あなたの返事をありがとう。 'producerFlowControl'は、メッセージを格納するために** false **に設定する必要がありますか?そして、あなたが知っているなら、 'storageUsage' - それは常にハードディスク容量に関するものなのでしょうか?それともデータベースのサイズを意味するのでしょうか? – Paul

0

これは、それがディスクから引っ張ってくるメモリ/メッセージの量にキューごとに制限を適用します、storeCursorを使用してdestinationPolicyでメモリ制限を設定してみてください...

<destinationPolicy> 
     <policyMap> 
      <policyEntries> 
       <policyEntry queue=">" producerFlowControl="false" memoryLimit="100mb"> 
        <pendingQueuePolicy> 
         <storeCursor/> 
        </pendingQueuePolicy> 
       </policyEntry> 
      </policyEntries> 
     </policyMap> 
    </destinationPolicy> 
関連する問題