Sun Java System Message Queue 3.7 UR1 管理指南

儲存訊息

徵兆:

若要查看是否累積訊息,請檢查代理程式中的訊息數目或訊息容量如何不斷變化,並與配置的限制進行比較。請先檢查配置的限制:

imqcmd query bkr


備註 –

imqcmd metrics bkr 子指令不會顯示此資訊。


接著檢查每個目標中的訊息累積:

imqcmd list dst

若要查看訊息是否超過所配置的目標或整個代理程式的限制,請檢查代理程式記錄中是否有以下項目:

[B2011]: Storing of JMS message from failed.

此項目後面還有其他項目,說明已超過限制。

可能原因:

可能原因:主題目標上有非使用中的長期訂閱。

如果長期訂閱為非使用中,則訊息會儲存在目標中,直到對應的用戶變為使用中狀態並能使用這些訊息為止。

若要確認此問題的原因:檢查每個主題目標上的長期訂閱狀態:

imqcmd list dur -d destName

若要解決此問題:

可能原因:佇列中可使用訊息的用戶太少。

如果可接收所傳送訊息的使用中用戶太少,則訊息累積時可能會積存在佇列目標中。此情況會因以下任何一種原因而發生:

若要確認此問題的原因:請檢查目標上使用中用戶的數目,以便幫助您判斷用戶為何無法使用:

imqcmd metrics dst - n destName -t q -m con

若要解決此問題:根據無法使用用戶的原因:

可能原因:訊息用戶處理速度過慢,無法跟上訊息產生器的速度。

在此狀況下,主題訂閱者或佇列接收者使用訊息的速度,會比產生器傳送訊息的速度慢。因為此不平衡現象,所以一個或多個目標中會出現訊息積存。

若要確認此問題的原因:檢查傳入和傳出代理程式之訊息流量的速率:

imqcmd metrics bkr -m rts

然後檢查每個個別目標的流量速率:

imqcmd metrics bkr -t destType -n destName - m rts

若要解決此問題:

可能原因:用戶端確認處理會降低訊息使用速度。

有兩個因素會影響用戶端確認處理:

若要確認此問題的原因:

若要解決此問題:

可能原因:代理程式無法跟上產生訊息的速度。

在此狀況下,訊息傳入代理程式的速度,會比代理程式路由和派送訊息到用戶的速度快。代理程式運作遲緩可以是因為以下任何或所有限制造成:

若要確認此問題的原因:檢查是否有其他可能造成此問題的原因。

若要解決此問題:

可能原因:用戶端程式碼缺點;用戶不確認訊息。

在所有要接收所傳送之訊息的用戶確認訊息之前,這些訊息會被保留在目標中。如果用戶端不確認使用的訊息,那麼訊息會累積在目標中且不被刪除。

舉例來說,用戶端程式碼可能會有以下缺點:

若要確認此問題的原因:首先,檢查本節中列出的所有其他可能原因。然後,使用下列指令,列出目標:

imqcmd list dst

請注意 UnAcked 標頭下列出的訊息數目,是否與目標中的訊息數目相同。此標頭下的訊息已傳送到用戶,但是尚未經過確認。如果這個數目與訊息總數相同,表示代理程式已經送出所有訊息,正在等待確認。

若要解決此問題:請應用程式開發者協助除錯此問題。