[AIX]

AIX 上識別問題的性質

為了協助識別問題的原因,需要考量一些起始問題。

關於此作業

在您瀏覽清單時,請記下可能與問題相關的任何事項。 即使您的觀察沒有立即提出原因,但如果您需要進行有系統的問題判斷工作,則稍後可能會有用。

當您使用 IBM開啟案例時,可以包括您為了協助調查問題而收集的其他 IBM MQ 疑難排解資訊 (MustGather 資料)。 如需相關資訊,請參閱 收集 IBM 支援中心的疑難排解資訊

程序

  1. IBM MQ 之前是否已順利執行?
    如果 IBM MQ 之前未順利執行,則可能是您尚未正確設定它。 如需相關資訊,請參閱 IBM MQ 安裝概觀在 AIX上安裝及解除安裝 IBM MQ

    如果要執行驗證程序,請參閱 在 AIX 上驗證 IBM MQ 安裝。 另請參閱 配置 IBM MQ ,以取得 IBM MQ後置安裝配置的相關資訊。

  2. 自前次順利執行以來是否已進行任何變更?
    IBM MQ 配置所做的變更,或對與 IBM MQ 互動的其他應用程式所做的變更,可能是您問題的原因。
    當您考量最近可能已進行的變更時,請考量 IBM MQ 系統,以及它與之互動的其他程式、硬體及任何新應用程式。 另請考量您不知道的新應用程式可能已在系統上執行的可能性。
    • 您是否已變更、新增或刪除任何佇列定義?
    • 您是否已變更或新增任何通道定義? 可能已對 IBM MQ 通道定義或應用程式所需的任何基礎通訊定義進行變更。
    • 您的應用程式是否處理因您所做的任何變更而可能取得的回覆碼?
    • 您是否已變更任何可能影響 IBM MQ作業的作業系統元件?
  3. 您是否已套用任何維護更新項目?
    如果您已將維護更新套用至 IBM MQ,請確認更新動作已順利完成,且未產生任何錯誤訊息。
    • 更新有任何特殊指示嗎?
    • 是否有執行任何測試來驗證已正確且完整套用更新?
    • 如果 IBM MQ 還原至先前的維護層次,問題是否仍然存在?
    • 如果安裝成功,請向「 IBM 支援中心」檢查是否有任何維護套件錯誤。
    • 如果維護套件已套用至任何其他應用程式,請考量它對 IBM MQ 介面的影響。
  4. 之前是否已順利執行應用程式?
    如果問題似乎涉及一個特定應用程式,請在下列之前考量應用程式是否已順利執行:
    • 自前次順利執行應用程式之後,對應用程式進行了任何變更嗎?

      如果是這樣,則錯誤可能位於應用程式的新部分或已修改部分的某個位置。 請查看變更,並查看您是否可以找到問題的明顯原因。 可以使用前一層次的應用程式重試嗎?

    • 應用程式的所有功能以前是否已完全執行過?

      問題是否發生在第一次使用之前從未呼叫過的應用程式部分時? 如果是這樣,則可能是應用程式的該部分發生錯誤。 嘗試找出應用程式失敗時執行的動作,並檢查程式該部分中的原始碼是否有錯誤。 如果先前多次順利執行程式,請檢查現行佇列狀態,以及發生錯誤時正在處理的檔案。 它們可能包含一些異常資料值,用來呼叫程式中的稀有使用路徑。

    • 應用程式會檢查所有回覆碼嗎?

      您的 IBM MQ 系統是否已變更 (可能以次要方式) ,讓您的應用程式不會檢查它因變更而收到的回覆碼。 例如,您的應用程式是否假設可以共用它所存取的佇列? 如果佇列已重新定義為專用,您的應用程式是否可以處理回覆碼,指出它無法再存取該佇列?

    • 應用程式是否在其他 IBM MQ 系統上執行?

      可能是這個 IBM MQ 系統的設定方式造成問題的不同嗎? 例如,是否已定義具有相同訊息長度或優先順序的佇列?

    在您查看程式碼之前,並根據撰寫程式碼所用的程式設計語言,檢查轉換器或編譯器和鏈結編輯器的輸出,以查看是否已報告任何錯誤。 如果您的應用程式無法轉換、編譯或鏈結編輯至載入程式庫,則如果您嘗試呼叫它,它也會無法執行。 如需建置應用程式的相關資訊,請參閱 開發應用程式

    如果文件顯示每一個步驟都已完成且沒有錯誤,請考量應用程式的編碼邏輯。 問題的症狀是否指出失敗的功能,因而指出錯誤的程式碼片段? 下列清單中的錯誤說明執行 IBM MQ 程式時所發生問題的最常見原因。 請考量下列一或多個錯誤可能導致 IBM MQ 系統發生問題的可能性:
    • 假設佇列可以共用,但實際上它們是專用的。
    • 在 MQI 呼叫中傳遞不正確的參數。
    • 在 MQI 呼叫中傳遞的參數不足。 這可能表示 IBM MQ 無法設定應用程式要處理的完成碼及原因碼。
    • 無法檢查 MQI 要求的回覆碼。
    • 傳遞指定了不正確長度的變數。
    • 以錯誤順序傳遞參數。
    • 無法正確起始設定 MsgIdCorrelId
    • 無法在 MQRC_TRUNCATED_MSG_ACCEPTED 之後起始設定 EncodingCodedCharSetId
  5. 當您在部分指令的說明文字中使用特殊字元時,是否收到錯誤?
    部分字元,例如反斜線 (\) 及雙引號 (") 字元與指令一起使用時具有特殊意義。

    在特殊字元之前加上 \,亦即,如果您要在文字中輸入 \" ,請輸入 \\\" 。 並非所有字元都可以與指令一起使用。 如需具有特殊意義的字元及其使用方式的相關資訊,請參閱 具有特殊意義的字元

  6. 是否有任何錯誤訊息或回覆碼可協助您判斷問題的位置及原因?
    IBM MQ 會使用錯誤日誌來擷取關於其專屬作業、您啟動的任何佇列管理程式,以及來自使用中通道的錯誤資料的訊息。 請檢查錯誤日誌,以查看是否已記錄與您問題相關聯的任何訊息。 如需錯誤日誌的位置及內容的相關資訊,請參閱 AIX、 Linux及 Windows 上的錯誤日誌

    對於每一個 IBM MQ 訊息佇列介面 (MQI) 及 IBM MQ 管理介面 (MQAI) 呼叫,佇列管理程式或結束常式會傳回完成碼及原因碼,以指出呼叫成功或失敗。 如果應用程式取得回覆碼,指出「訊息佇列介面 (MQI)」呼叫失敗,請檢查原因碼以進一步瞭解問題。 如需原因碼清單,請參閱 API 完成及原因碼。 回覆碼的詳細資訊包含在每一個 MQI 呼叫的說明內。

  7. 您可以重新產生問題嗎?
    如果您可以重新產生問題,請考量重新產生問題的條件:
    • 它是由指令或同等的管理要求所造成嗎? 如果作業是由另一個方法輸入,則該作業是否正常運作? 如果指令在指令行上輸入,但未輸入,則指令可以運作,請檢查指令伺服器是否未停止,以及 SYSTEM.ADMIN.COMMAND.QUEUE 尚未變更。
    • 是程式造成的嗎? 它是在所有 IBM MQ 系統及所有佇列管理程式上失敗,還是只在部分系統上失敗?
    • 當發生問題時,您可以識別任何似乎一律在系統中執行的應用程式嗎? 如果是這樣,請檢查應用程式,以查看它是否有錯誤。
  8. 問題是否影響網路的特定部分?
    您是否已進行任何網路相關變更,或已變更任何可能導致問題的 IBM MQ 定義?
    您可能可以識別受問題影響的網路特定部分 (例如,遠端佇列)。 如果遠端訊息佇列管理程式的鏈結無法運作,則訊息無法流向遠端佇列。
    • 檢查兩個系統之間的連線是否可用,以及 IBM MQ 的交互通訊元件是否已啟動。
    • 請檢查訊息是否到達傳輸佇列,並檢查傳輸佇列及任何遠端佇列的本端佇列定義。
  9. 問題是否在一天中的特定時間發生?
    如果問題發生在一天中的特定時間,則可能是取決於系統載入。 通常,尖峰系統負載是在上午中和下午中,因此這些是最有可能發生負載相依問題的時間。

    如果您的 IBM MQ 網路延伸到多個時區,則尖峰系統載入可能似乎在一天中的某個其他時間發生。

  10. 問題是否間歇性?
    間歇性問題可能是由處理程序彼此獨立執行的方式所造成。 例如,在先前的處理程序完成之前,程式可能會發出 MQGET 呼叫,但未指定等待選項。 如果您的應用程式在確定放置訊息的呼叫之前嘗試從佇列取得訊息,也可能會看到間歇性問題。