Sun Java System Message Queue 3.7 UR1 管理指南

訊息產生延遲或過慢

徵兆:

可能原因:

可能原因:訊息積存於代理程式上,因此回應訊息產生器的速度會變慢。

積存的代理程式會將訊息累積在代理程式記憶體中。實體目標記憶體中的訊息數目或訊息容量到達所配置的限制時,代理程式會依指定的限制運作方式,嘗試節省記憶體資源。以下限制運作方式會降低訊息產生器的速度:

同樣地,整個代理程式記憶體 (用於所有實體目標) 中的訊息數目或訊息容量到達所配置的限制時,代理程式會拒絕最新的訊息,以嘗試節省記憶體資源。再者,到達系統記憶體限制時,因為實體目標或整個代理程式的限制未正確設定,所以代理程式會採取愈來愈重要的動作,以防記憶體超載。這些動作包括減低訊息產生器的速度。

若要確認此問題的原因:當代理程式按照所配置的訊息限制來拒絕訊息時,代理程式會傳回異常

JMSException [C4036]: A server error occurred

並且在代理程式記錄中產生以下項目:

[B2011]: Storing of JMS message from IMQconn failed

此訊息後面還有一則訊息指出已經達到限制:

[B4120]: Cannot store message on destination destName because capacity of maxNumMsgs would be exceeded.

這是超出實體目標訊息限制時的狀況;或者

[B4024]: The maximum number of messages currrently in the system has been exceeded, rejecting message.

這是超出整個代理程式訊息限制時的狀況。

一般而言,您可以在遭到拒絕前,依以下方式檢查訊息限制條件:

若要解決此問題:

可能原因:代理程式無法將永久性訊息儲存到資料存放區。

如果代理程式無法存取資料存放區或將永久性訊息寫入資料存放區,則表示訊息產生用戶端被阻斷。這種情況亦會在目標或整個代理程式訊息到達限制時發生,如上所述。

若要確認此問題的原因:如果代理程式無法寫入資料存放區,則會在代理程式記錄中產生以下其中一個項目:

[B2011]: Storing of JMS message from connectionID failed [B4004]: Failed to persist message messageID

若要解決此問題:

可能原因:代理程式回應逾時過短。

由於連線速度慢或代理程式緩慢 (由於高 CPU 使用率或記憶體資源不足所引起),代理程式可能需要更多時間確認永久性訊息的接收,所需要的時間會超過連線工廠 imqAckTimeout 屬性所允許的值。

若要確認此問題的原因:如果超過 imqAckTimeout 值,代理程式會傳回異常

JMSException [C4000]: Packet acknowledge failed

若要解決此問題:變更 imqAckTimeout 連線工廠屬性的值 (請參閱可靠性與流量控制)。

可能原因:訊息產生用戶端受到 JVM 限制。

若要確認此問題的原因:

若要解決此問題:調整 JVM (請參閱Java 虛擬機器調整)。