如何進行WebShpere MQ 運行故障的定位分析和排除(二)

您需要檢查一下對方的MQ是否處於運行狀態以及對方的通道偵聽程序是否啟動;如果錯誤日誌顯示”通道未在遠程定義”,您可以檢查您定義的通道的大小寫是否正確等。

2 常見故障分析

在開始詳細分析問題的原因之前,我們應該首要考慮一下可能導致問題的一些較明顯的因素,或導致問題發生的最大可能性因素,這樣便於把分析問題的範圍限制到最小。

如前所述,有關的MQ的異常情況的發生,通常主要與三方面的因素有關,即:

MQSeries本身

網路

客戶的應用

2.1 初步分析

當出現問題時,可從這三方面著手分析原因,這裡,列舉了一些基本問題,您可以按照此順序來查找問題的原因。

  • 在此之前MQ是否運行正常?
  • 從最近一次成功運行以來,是否在某些地方作過改動?
  • 在此之前,應用是否運行成功?
    如果您的系統曾經運行正常,那麽在出現問題之前,您對哪些部分做了改動,如:有的用戶可能由於網路重新規劃而更改了某個主機的IP地址,則可能導致通道無法連通;有的用戶新設置了防火牆,則需要進行相應的配置,才能使MQ的通道運行正常。如果您沒有對系統配置做過更改,您可以分析是否運行環境發生了變化,如:是否由於業務量的加大導致應用程序隊列滿了,您需要加大隊列的最大深度;是否由於連接數量的增加,導致無法建立新的連接,這時,您需要察看在隊列管理器配置文件中,與通道相關的MaxChannels和MaxActiveChannels的配置是否足夠大。
  • 有無錯誤信息?
    可以察看錯誤日誌,得到錯誤信息。
  • 是否與MQI應用有關,利用返回碼能否解釋原因?
    對於每一個函數調用,MQ都會返回一個Completion Code和Reason Code,通過MQI返回碼Reason Code,可以在API一層,確定錯誤原因,Reason Code代表的含義可以參考編程手冊,或者從h頭文件中獲得。如:RC2035,代表沒有操作許可權;RC2085,表示沒有該對象;RC2080,表示應用程序給出的buffer小於消息的實際大小等。
  • 問題能再現嗎?
  • 從最近一次成功運行以來,是否在某些地方作過改動?
  • 在此之前,應用是否運行成功?
  • 網路是否連接正常?
  • 問題是否總在每天的某一固定時刻發生?

2.2 深入分析

如果初步分析無法解決問題,您必須更進一步查找原因,您可以近一步考慮如下問題:

2.2.1 與隊列相關的問題

1) 隊列狀態是否正常?

  • 用DISPLAY QUEUE命令查看隊列的各項狀態
  • 用得到的隊列信息進一步查看:
    a) 如果CURDEPTH達到MAXDEPTH,表明隊列深度已滿,新消息已不能再進入隊列,要及時處理隊列中積存的消息;或者增大隊列的MAXDEPTH屬性。 b) 如果CURDEPTH還沒有達到MAXDEPTH,再考慮以下兩種情況:
    如果隊列被設置為可觸發類型的,要檢查觸發條件有沒有滿足?相關觸發進程的定義是否正確?如果隊列不是觸發類型的,要檢查隊列是否為可共享的,是否允許PUT或GET的操作等。

2) 消息是否成功地放入隊列?

如果消息沒有成功地放入隊列,您可以檢查:

  • 隊列是否被正確定義?例如,隊列的MaxMsgLength屬性是否足夠大以容納所需大小的消息?
  • 隊列是否被允許放入?
  • 隊列是否已滿?這可能意味著應用程序無法將要求的消息放入隊列。
  • 有沒有另一個應用程序取得了獨佔隊列的權力?

3) 你是否可以從隊列取出任何消息?

如果你無法從隊列中取出任何消息,檢查:

  • 其他應用程序能否從隊列中取出消息?
  • 有沒有另一個應用程序取得了獨佔隊列的權力?

如果你正在開發應用程序,檢查:

  • 你是否需要使用一個同步點? 如果使用同步點控制來放入或檢出消息,它們直到工作單元被提交前不能用於其它任務。
  • 是否等待了足夠長的時間? 作為MQGET調用的一個選項,你可以設置等待間隔。你應該確保等待響應足夠長的時間。
  • 你是否在等待一條由消息或相關標識符(MsgId或CorrelId)標識的特定消息?

檢查你在等待的消息的MsgId或CorrelId是否正確。成功的MQGET調用會把這些值設置為檢索到的消息的值,所以你可能要重設這些值以便成功地取出另一條消息。

  • 您對消息是否進行了分段處理,您是否在利用MQGET讀取消息時,採用了正確的選項(MQGMO),從而獲取消息的整體。
  • 還要檢查一下你是否能夠從隊列中取出另一條消息。
  • 你期望的消息有沒有被定義為持久的? 如果沒有,並且MQ重新啟動後,消息將已丟失。

4)問題是否與遠程隊列有關?

如果問題是否與遠程隊列有關,則要考慮以下幾個方面:

  • ¢ 遠程隊列的定義是否正確;
  • 檢查通道是否啟動,如果通道是可被觸發的,要檢查觸發監視器是否運行正常;
  • 檢查往遠程隊列里發送消息的應用程序是否運行正常;
  • 從錯誤日誌中查找信息;

2.2.2 與通道相關的問題

MQSeries的通道是MQ的重要組成部分,是MQ的難點和精華,它運行正常與否對MQ系統的正常運行起著致關重要的作用,並且,在MQ的網路環境中,相當數量的異常問題與通道有關,因此,相比而言,對MQ通道的維護工作是MQ系統管理員系統管理工作的重點。下面,我們給出當通道出現異常時,判斷通道狀態、分析問題原因、以及解決通道問題的途徑和基本手段。

這裡先給出有關通道的幾個基本概念:

1) 通道狀態

通道狀態有binding、running、stopping、stoped、retrying等幾種類型,當我們發出啟動通道的命令之後,通道進入binding的狀態,若網路連接暢通並且通道定義正確,它進入正常running狀態;而在異常情況下,比如網路連接有問題、通道定義不正確或通道兩端的消息序列號(Message Sequence Number)不匹配等,通道即進入retrying的狀態,它會根據通道定義中short retry和long retry的次數和時間間隔依次進行short retry和long retry,若不成功,則通道無法正常啟動。

2) 消息序列號(Message Sequence Number)

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營

發表評論

您的電子郵箱地址不會被公開。 必填項已用*標註