Sun Java System Message Queue 3.7 UR1 管理指南

停用的訊息佇列包含訊息

徵兆:


Listing all the destinations on the broker specified by:
---------------------------------
Host         Primary Port
---------------------------------
localhost    7676
----------------------------------------------------------------------
   Name     Type    State   Producers  Consumers  Msgs
                                         Total    Count  UnAck  Avg Size
------------------------------------------------- ----------------------
MyDest      Queue  RUNNING       0          0        5      0    1177.0
mq.sys.dmq  Queue  RUNNING       0          0       35      0    1422.0
Successfully listed destinations.

在此範例中,停用的訊息佇列 mq.sys.dmq 包含 35 個訊息。

可能原因:

可能原因:訊息數目或訊息容量超出目標限制。

若要確認此問題的原因:使用 QBrowser 示範應用程式,查看停用的訊息佇列內容。如需 QBrowser 示範程式在特定作業系統上的位置,請參閱附錄 AMessage QueueTM 資料的特定平台位置,查看表格中的「應用程式範例與位置」。

以下是 Windows 平台的呼叫範例:

cd \MessageQueue3\demo\applications\qbrowser java QBrowser

QBrowser 主視窗出現時,請選擇佇列名稱 mq.sys.dmq,然後按一下 [瀏覽]。出現的清單與先前在「訊息的逾時值過期」下顯示的清單類似。連按兩下任何訊息,以顯示此訊息的詳細資訊,如「訊息的逾時值過期」下所示。

請注意下列訊息特性值:

請注意 JMS Headers 下的 JMSDestination 值,以便判斷將要停用其訊息的目標。

若要解決此問題:增加目標限制。例如:

imqcmd update dst - n MyDest -o maxNumMsgs=1000

可能原因:代理程式時鐘和產生器時鐘不同步。

若要確認此問題的原因:使用 QBrowser 應用程式,檢視停用的訊息佇列中訊息的詳細資訊。檢查 JMS_SUN_DMQ_UNDELIVERED_REASON 的值,尋找原因為 EXPIRED 的訊息。

查看代理程式記錄檔中有無下列訊息:B2102 B2103B2104。這些訊息都報告偵測到時鐘可能不準。

若要解決此問題:準備系統資源中所述,檢查有無執行時間同步化程式。

可能原因:用戶在訊息逾時前一直未收到訊息。

若要驗證此問題的原因:使用 QBrowser 應用程式,檢視停用的訊息佇列中訊息的詳細資訊。檢查 JMS_SUN_DMQ_UNDELIVERED_REASON 的值,尋找原因為 EXPIRED 的訊息。

檢查目標上有無任何用戶。例如:

imqcmd query dst -t q -n MyDest

檢查列出的 Current Number of Active Consumers 值。如果有使用中的用戶,下列其中一項為 true:

若要解決此問題:請應用程式開發者增加訊息存在時間值。

可能原因:產生器數目對於用戶數目而言過多。

若要確認此問題的原因:使用 QBrowser 應用程式,檢視停用的訊息佇列中訊息的詳細資訊。檢查 JMS_SUN_DMQ_UNDELIVERED_REASON 的值。如果原因是 REMOVE_OLDESTREMOVE_LOW_PRIORITY ,請使用 imqcmd query dst 指令,檢查目標上的產生器數目和用戶數目。如果產生器數目超過用戶數目,產生速率可能高於使用速率。

若要解決此問題:使用如下所示的指令,增加更多的訊息使用用戶端,或將目標的限制運作方式設定為 FLOW_CONTROL (以使用速率控制產生速率):

imqcmd update dst -n myDst -t q -o consumerFlowLimit=FLOW_CONTROL

可能原因:產生器的速度比用戶快。

若要確認此問題的原因:若要判斷是否因為用戶速度慢而導致產生器的速度變慢,請使用如下所示的指令,將目標的限制運作方式設定為 F LOW_CONTROL (以使用速率控制產生速率):

imqcmd update dst -n myDst -t q -o consumerFlowLimit=FLOW_CONTROL

利用如下所示的指令,使用度量來檢查目標的輸入與輸出:

imqcmd metrics dst - n myDst -t q -m rts

在度量輸出中,檢查下列的值:

流量控制會針對使用調整產生,注意產生速度是否變慢或停止。如果產生速度變慢或停止,則表示產生器和用戶的處理速度有差異。您也可以使用 imqcmd list dst 指令,檢查已傳送的未確認 (UnAcked) 訊息數目。如果未確認的訊息數目小於目標容量,表示目標有其他容量受到用戶端的流量控制所控制。

若要解決此問題:如果產生速率一直快於使用速率,請考慮定期使用流量控制讓系統步調一致。後續幾節介紹如何解決下面的可能因素:

可能原因:用戶的速度太慢。

若要確認此問題的原因:「產生器的速度比用戶快」中所描述,使用度量來判斷產生速率和使用速率。

若要解決此問題:

可能原因:用戶端未確定訊息。

若要確認此問題的原因:向應用程式開發者查詢應用程式是否使用作業事件。如果應用程式使用作業事件,請列出使用中作業事件,如下所示:

imqcmd list txn

下列是指令輸出的範例:


----------------------------------------------------------------------
Transaction ID       State    User name  # Msgs/# Acks   Creation time
----------------------------------------------------------------------
6800151593984248832  STARTED  guest           3/2     7/19/04 11:03:08 AM

請注意訊息和確認的數目。如果訊息數目大於確認數目,表示產生器可能有傳送個別訊息,但卻無法確定作業事件。代理程式收到確定後,才能路由並傳送該項作業事件的訊息。如果確認數目大於訊息數目,表示用戶可能有傳送個別訊息,但卻無法確定作業事件。代理程式收到確定後,才能移除該項作業事件的確認。

若要解決此問題:請連絡應用程式開發者,修正程式錯誤。

可能原因:用戶無法確認訊息。

若要確認此問題的原因:連絡應用程式開發者,判斷應用程式使用系統型確認或用戶端型確認。如果應用程式使用系統型確認,請略過本節。如果應用程式使用用戶端型確認 (CLIENT_ACKNOWLEDGE),請使用如下所示的指令,先減少用戶端上儲存的訊息數目:

imqcmd update dst -n myDst -t q -o consumerFlowLimit=1

然後判斷是因為用戶的速度太慢而使代理程式緩衝訊息,或是用戶處理訊息的速度很快,只是未確認訊息。使用下列指令,列出目標:

imqcmd list dst

提供使用者名稱和密碼之後,出現類似下列的輸出:


Listing all the destinations on the broker specified by:
---------------------------------
Host         Primary Port
---------------------------------
localhost    7676
----------------------------------------------------------------------
   Name     Type    State   Producers  Consumers  Msgs
                                         Total    Count  UnAck  Avg Size
------------------------------------------------ -----------------------
MyDest      Queue  RUNNING       0          0        5    200    1177.0
mq.sys.dmq  Queue  RUNNING       0          0       35      0    1422.0
Successfully listed destinations.

UnAck 數目代表代理程式傳送出去後等待確認的訊息數目。如果此數目變大或增加,表示代理程式正在傳送訊息,不等待速度較慢的用戶。您也可以看出用戶未確認訊息。

若要解決此問題:請連絡應用程式開發者,修正編碼錯誤。

可能原因:長期用戶處於非使用中狀態。

若要確認此問題的原因:使用下列的指令格式,查看主題的長期訂閱者:

imqcmd list dur -d topicName

若要解決此問題:

可能原因:發生非預期的代理程式錯誤。

若要確認此問題的原因:「產生器的速度比用戶快」中所描述,使用 QBrowser 檢查訊息。如果 JMS_SUN_DMQ_UNDELIVERED_REASON 的值是 ERROR ,表示代理程式發生錯誤。

若要解決此問題: