![[AIX]](ngaix.gif)
在 AIX 上識別問題的性質
為了協助識別問題的原因,需要考量一些起始問題。
關於此作業
在您瀏覽清單時,請記下可能與問題相關的任何事項。 即使您的觀察沒有立即提出原因,但如果您需要進行有系統的問題判斷工作,則稍後可能會有用。
當您使用 IBM開啟案例時,可以包括您為了協助調查問題而收集的其他 IBM MQ 疑難排解資訊 (MustGather 資料)。 如需相關資訊,請參閱 收集 IBM 支援中心的疑難排解資訊。
程序
- IBM MQ 之前是否已順利執行?如果 IBM MQ 之前未順利執行,則可能是您尚未正確設定它。 如需相關資訊,請參閱 IBM MQ 安裝概觀 及 在 AIX上安裝及解除安裝 IBM MQ。
如果要執行驗證程序,請參閱 在 AIX 上驗證 IBM MQ 安裝。 另請參閱 配置 IBM MQ ,以取得 IBM MQ後置安裝配置的相關資訊。
- 自前次順利執行以來是否已進行任何變更?對 IBM MQ 配置所做的變更,或對與 IBM MQ 互動的其他應用程式所做的變更,可能是您問題的原因。當您考量最近可能已進行的變更時,請考量 IBM MQ 系統,以及它與之互動的其他程式、硬體及任何新應用程式。 另請考量您不知道的新應用程式可能已在系統上執行的可能性。
- 您是否已變更、新增或刪除任何佇列定義?
- 您是否已變更或新增任何通道定義? 可能已對 IBM MQ 通道定義或應用程式所需的任何基礎通訊定義進行變更。
- 您的應用程式是否處理因您所做的任何變更而可能取得的回覆碼?
- 您是否已變更任何可能影響 IBM MQ作業的作業系統元件?
- 您是否已套用任何維護更新項目?如果您已將維護更新套用至 IBM MQ,請確認更新動作已順利完成,且未產生任何錯誤訊息。
- 更新有任何特殊指示嗎?
- 是否有執行任何測試來驗證已正確且完整套用更新?
- 如果 IBM MQ 還原至先前的維護層次,問題是否仍然存在?
- 如果安裝成功,請向「 IBM 支援中心」檢查是否有任何維護套件錯誤。
- 如果維護套件已套用至任何其他應用程式,請考量它對 IBM MQ 介面的影響。
- 之前是否已順利執行應用程式?如果問題似乎涉及一個特定應用程式,請在下列之前考量應用程式是否已順利執行:
- 自前次順利執行應用程式之後,對應用程式進行了任何變更嗎?
如果是這樣,則錯誤可能位於應用程式的新部分或已修改部分的某個位置。 請查看變更,並查看您是否可以找到問題的明顯原因。 可以使用前一層次的應用程式重試嗎?
- 應用程式的所有功能以前是否已完全執行過?
問題是否發生在第一次使用之前從未呼叫過的應用程式部分時? 如果是這樣,則可能是應用程式的該部分發生錯誤。 嘗試找出應用程式失敗時執行的動作,並檢查程式該部分中的原始碼是否有錯誤。 如果先前多次順利執行程式,請檢查現行佇列狀態,以及發生錯誤時正在處理的檔案。 它們可能包含一些異常資料值,用來呼叫程式中的稀有使用路徑。
- 應用程式會檢查所有回覆碼嗎?
您的 IBM MQ 系統是否已變更 (可能以次要方式) ,讓您的應用程式不會檢查它因變更而收到的回覆碼。 例如,您的應用程式是否假設可以共用它所存取的佇列? 如果佇列已重新定義為專用,您的應用程式是否可以處理回覆碼,指出它無法再存取該佇列?
- 應用程式是否在其他 IBM MQ 系統上執行?
可能是這個 IBM MQ 系統的設定方式造成問題的不同嗎? 例如,是否已定義具有相同訊息長度或優先順序的佇列?
在您查看程式碼之前,並根據撰寫程式碼所用的程式設計語言,檢查轉換器或編譯器和鏈結編輯器的輸出,以查看是否已報告任何錯誤。 如果您的應用程式無法轉換、編譯或鏈結編輯至載入程式庫,則如果您嘗試呼叫它,它也會無法執行。 如需建置應用程式的相關資訊,請參閱 開發應用程式。
如果文件顯示每一個步驟都已完成且沒有錯誤,請考量應用程式的編碼邏輯。 問題的症狀是否指出失敗的功能,因而指出錯誤的程式碼片段? 下列清單中的錯誤說明執行 IBM MQ 程式時所發生問題的最常見原因。 請考量下列一或多個錯誤可能導致 IBM MQ 系統發生問題的可能性:- 假設佇列可以共用,但實際上它們是專用的。
- 在 MQI 呼叫中傳遞不正確的參數。
- 在 MQI 呼叫中傳遞的參數不足。 這可能表示 IBM MQ 無法設定應用程式要處理的完成碼及原因碼。
- 無法檢查 MQI 要求的回覆碼。
- 傳遞指定了不正確長度的變數。
- 以錯誤順序傳遞參數。
- 無法正確起始設定
MsgId和CorrelId。 - 無法在 MQRC_TRUNCATED_MSG_ACCEPTED 之後起始設定
Encoding和CodedCharSetId。
- 自前次順利執行應用程式之後,對應用程式進行了任何變更嗎?
- 當您在部分指令的說明文字中使用特殊字元時,是否收到錯誤?部分字元,例如反斜線 (\) 及雙引號 (") 字元與指令一起使用時具有特殊意義。
在特殊字元之前加上
\,亦即,如果您要在文字中輸入\或",請輸入\\或\"。 並非所有字元都可以與指令一起使用。 如需具有特殊意義的字元及其使用方式的相關資訊,請參閱 具有特殊意義的字元。 - 是否有任何錯誤訊息或回覆碼可協助您判斷問題的位置及原因?IBM MQ 會使用錯誤日誌來擷取關於其專屬作業、您啟動的任何佇列管理程式,以及來自使用中通道的錯誤資料的訊息。 請檢查錯誤日誌,以查看是否已記錄與您問題相關聯的任何訊息。 如需錯誤日誌的位置及內容的相關資訊,請參閱 AIX、 Linux及 Windows 上的錯誤日誌。
對於每一個 IBM MQ 訊息佇列介面 (MQI) 及 IBM MQ 管理介面 (MQAI) 呼叫,佇列管理程式或結束常式會傳回完成碼及原因碼,以指出呼叫成功或失敗。 如果應用程式取得回覆碼,指出「訊息佇列介面 (MQI)」呼叫失敗,請檢查原因碼以進一步瞭解問題。 如需原因碼清單,請參閱 API 完成及原因碼。 回覆碼的詳細資訊包含在每一個 MQI 呼叫的說明內。
- 您可以重新產生問題嗎?如果您可以重新產生問題,請考量重新產生問題的條件:
- 它是由指令或同等的管理要求所造成嗎? 如果作業是由另一個方法輸入,則該作業是否正常運作? 如果指令在指令行上輸入,但未輸入,則指令可以運作,請檢查指令伺服器是否未停止,以及 SYSTEM.ADMIN.COMMAND.QUEUE 尚未變更。
- 是程式造成的嗎? 它是在所有 IBM MQ 系統及所有佇列管理程式上失敗,還是只在部分系統上失敗?
- 當發生問題時,您可以識別任何似乎一律在系統中執行的應用程式嗎? 如果是這樣,請檢查應用程式,以查看它是否有錯誤。
- 問題是否影響網路的特定部分?您是否已進行任何網路相關變更,或已變更任何可能導致問題的 IBM MQ 定義?您可能可以識別受問題影響的網路特定部分 (例如,遠端佇列)。 如果遠端訊息佇列管理程式的鏈結無法運作,則訊息無法流向遠端佇列。
- 檢查兩個系統之間的連線是否可用,以及 IBM MQ 的交互通訊元件是否已啟動。
- 請檢查訊息是否到達傳輸佇列,並檢查傳輸佇列及任何遠端佇列的本端佇列定義。
- 問題是否在一天中的特定時間發生?如果問題發生在一天中的特定時間,則可能是取決於系統載入。 通常,尖峰系統負載是在上午中和下午中,因此這些是最有可能發生負載相依問題的時間。
如果您的 IBM MQ 網路延伸到多個時區,則尖峰系統載入可能似乎在一天中的某個其他時間發生。
- 問題是否間歇性?間歇性問題可能是由處理程序彼此獨立執行的方式所造成。 例如,在先前的處理程序完成之前,程式可能會發出 MQGET 呼叫,但未指定等待選項。 如果您的應用程式在確定放置訊息的呼叫之前嘗試從佇列取得訊息,也可能會看到間歇性問題。