2011-09-20 163 views
1

我有一個使用ActiveMQ(5.3.2)將消息從服​​務器A發送到服務器B的生產系統。幾個星期前,系統莫名其妙地開始花費10多秒來發送消息。系統重啓後,系統運行良好。檢測ActiveMQ流量控制

經過調查,我很確定這是由於生產者流量控制。 (我有一個相當標準的activemq設置)。發生此事的前一天(出於其他原因),我的消費者軟件一直處於不正常行爲狀態,甚至一度停止接受連接。所以我猜這引發了這個。 (這確實讓我感到困惑,一天之後請求仍然受到限制)。

問題 - 我如何確認請求被限制。我拿了服務器的堆轉儲 - 我可以查找內存中的數據嗎?

編輯:我發現以下內容: 對於內存中的三個WireFormatNegotiator實例之一,WireFormatNegotiator.tcpNoDelayEnabled = false。我試圖弄清楚這是什麼。

第二個(也是更重要的),有沒有一種方法可以使用JMX來判斷消息是否被限制?我想建立一個Nagios警報,讓我知道這是否會在未來發生。我應該使用JMX檢查哪些屬性?

回答

0

可以configure your producer client扔,然後可以檢測/登錄javax.jms.ResourceAllocationException異常等,只要設定下面的一個...

<systemUsage> 
    <systemUsage sendFailIfNoSpaceAfterTimeout="3000"> 
    ...OR... 
    <systemUsage sendFailIfNoSpace="true"> 
+0

很有必要知道 - 感謝。仍然希望有人對我的問題有更直接的回答。 –

+0

請問,這是從客戶端/監視器的角度來檢測流量控制。如果你看到這些錯誤,那麼生產者流量控制就會「踢」進來。如果你沒有設置這些,那麼send()將會阻塞,直到生產者可以恢復。 –

+0

這很有幫助,謝謝 –