[z/OS]

z/OS 上識別問題的性質

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

關於此作業

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

程序

  1. IBM MQ for z/OS 之前是否已順利執行?
    如果此問題的答案是 ,請考量下列事項:
    • 請檢查您的設定。 如果之前未在 z/OS 上順利執行 IBM MQ ,則可能是您尚未正確設定它。 如需進一步指引,請參閱 安裝 IBM MQ for z/OS 產品 中關於安裝及自訂佇列管理程式的資訊。
    • 驗證安裝。
    • 確認已發出 CSQ9022I 訊息,以回應 START QMGR 指令 (指示正常完成)。
    • 確保 z/OSIBM MQ 顯示為已安裝的子系統。 若要判斷 IBM MQ 是否為已安裝的子系統,請使用 z/OS 指令 D OPDATA
    • 檢查安裝驗證程式 (IVP) 是否順利執行。
    • 使用指令 DISPLAY DQM 來檢查通道起始程式位址空間是否在執行中,以及是否已啟動適當的接聽器。
  2. 是否有任何錯誤訊息、回覆碼或其他錯誤狀況?
    請調查佇列管理程式或通道起始程式終止的任何錯誤訊息、回覆碼及狀況。 問題可能會產生下列類型的錯誤訊息或回覆碼:
    • CSQ 訊息及原因碼

      IBM MQ for z/OS 錯誤訊息具有字首 CSQ。 如果您收到任何具有此字首的訊息 (例如,在主控台日誌或 CICS 日誌中) ,請參閱 IBM MQ for z/OS 訊息、完成及原因碼 ,以取得說明。

    • 其他訊息

      如需具有不同字首的訊息,請查看適當的訊息及訊息碼主題,以取得建議的動作方針。

    • 異常訊息

      請注意與 IBM MQ for z/OS啟動相關聯的異常訊息,或在發生錯誤之前系統執行時發出的異常訊息。 任何不尋常的訊息都可能指出導致應用程式無法順利執行的某個系統問題。

    • 應用程式 MQI 回覆碼

      如果您的應用程式取得回覆碼,指出 MQI 呼叫失敗,請參閱 回覆碼 ,以取得該回覆碼的說明。

  3. 您可以重新產生問題嗎?
    如果您可以重新產生問題,請考量您可以重新產生問題的條件。 例如:
    • 是命令造成的嗎? 若是如此,則是從 z/OS 主控台發出的指令,從 CSQUTIL 寫入程式,以將指令放置到 SYSTEM.COMMAND.INPUT 佇列,或使用作業及控制台?
    • 如果由另一個方法輸入指令,則該指令可以運作嗎? 如果指令在主控台中輸入時有效,但未在其他情況下有效,請檢查指令伺服器是否未停止,以及 SYSTEM.COMMAND.INPUT 佇列。
    • 指令伺服器是否在執行中? 發出指令 DIS CMDSERV 以檢查。
    • 是否由應用程式所造成? 若是如此,它會在 CICSIMS、TSO 或批次中失敗嗎? 它是在所有 IBM MQ 系統上失敗,還是僅在部分系統上失敗?
    • 應用程式是否造成問題? 當發生問題時,您可以識別任何似乎一律在系統中執行的應用程式嗎? 如果是這樣,請檢查應用程式,以查看它是否有錯誤。
  4. 您是否已套用任何 APAR 或 PTF?
    APAR 及 PTF 有時會導致 IBM MQ發生非預期的問題。 這些修正程式可能已套用至 IBM MQ 或其他 z/OS 系統。

    如果 APAR 或 PTF 已套用至 IBM MQ for z/OS,請檢查未產生任何錯誤訊息。 如果安裝成功,請洽詢「 IBM 支援中心」,以取得任何 APAR 或 PTF 錯誤。

    如果 APAR 或 PTF 已套用至任何其他產品,請考量它可能對 IBM MQ 與它互動的方式產生的影響。

    請確定您已遵循 APAR 中任何會影響系統的指示。 (例如,您可能必須重新定義資源。)

  5. 自前次順利執行以來是否已進行任何變更?
    當您考量最近可能已進行的變更時,請考慮 IBM MQ,以及它與之互動的其他程式、硬體及任何新的應用程式。 另請考量您尚未知道的新應用程式可能已在系統上執行的可能性。
    • 您的起始設定程序已變更嗎? 請考量這是否可能是問題的原因。 您是否已變更任何資料集,或已變更程式庫定義? 是否已使用不同的參數來起始設定 z/OS ? 此外,請檢查在起始設定期間傳送至主控台的錯誤訊息。
    • 您已變更任何佇列定義或安全設定檔嗎? 請考量是否已變更部分佇列,使其成為叢集的成員。 這項變更可能表示訊息來自不同的來源 (例如,其他佇列管理程式或應用程式)。
    • 您是否已變更 Sysplex 中與支援及實作共用佇列相關的任何定義? 請考量變更定義的效果,例如 Sysplex 連結資料集或「連結機能」資源管理原則。 這些變更可能對共用佇列的作業產生影響。 此外,請考量變更對 Db2® 資料共用環境的影響。
    • z/OS 系統上的任何軟體是否已升級至更新版本? 請考量您是否需要執行任何必要的後置安裝或移轉活動。
    • 您的 z/OS 子系統名稱表格已變更嗎? 對並存條件軟體 (例如 z/OS 或 LE) 的層次進行變更可能需要對 IBM MQ進行其他變更。
    • 您的應用程式是否處理因您所做的任何變更而可能取得的回覆碼? 請確定您的應用程式會處理您所建立的任何新回覆碼。
  6. 之前是否已順利執行應用程式?
    如果問題似乎涉及某個特定應用程式,請考量應用程式之前是否已順利執行。
    • 自前次順利執行應用程式之後,對應用程式進行了任何變更嗎? 如果是這樣,則錯誤可能位於應用程式的新部分或已修改部分的某個位置。 請調查變更,並查看您是否可以找到問題的明顯原因。
    • 應用程式的所有功能以前是否已完全執行過? 第一次使用應用程式之前從未啟動的部分時,是否發生問題? 如果是這樣,則可能是應用程式的該部分發生錯誤。 嘗試找出應用程式失敗時執行的動作,並檢查程式該部分中的原始碼是否有錯誤。 如果已在先前多次順利執行程式,請檢查現行佇列狀態及發生錯誤時正在處理的檔案。 它們可能包含一些不尋常的資料值,會導致呼叫程式中很少使用的路徑。
    • 應用程式會檢查所有回覆碼嗎? 您的系統是否已變更,可能以較小的方式。 請檢查應用程式因變更而收到的回覆碼。 例如:
      • 您的應用程式是否假設可以共用它所存取的佇列? 如果佇列已重新定義為專用,您的應用程式是否可以處理回覆碼,指出它無法再存取該佇列?
      • 是否有任何安全設定檔已變更? MQOPEN 呼叫可能因安全違規而失敗; 您的應用程式可以從產生的回覆碼回復嗎?
    • 應用程式是否預期特定的訊息格式? 如果已將具有非預期訊息格式的訊息放入佇列 (例如,來自不同平台上佇列管理程式的訊息) ,則可能需要資料轉換或其他不同的處理形式。
    • 應用程式是否在其他 IBM MQ for z/OS 系統上執行? 造成問題的佇列管理程式設定方式是否不同? 例如,是否已使用相同的訊息長度上限或預設優先順序來定義佇列?
    • 應用程式是否使用 MQSET 呼叫來變更佇列屬性? 應用程式是否設計為將佇列設為沒有觸發程式,然後處理部分工作,然後將佇列設為具有觸發程式? 在佇列重設為具有觸發程式之前,應用程式可能已失敗。
    • 應用程式是否處理導致應用程式失敗的訊息? 如果應用程式因訊息毀損而失敗,則會回復擷取的訊息。 下一個應用程式可能會收到相同的訊息,並以相同的方式失敗。 請確定應用程式使用取消計數; 當達到取消計數臨界值時,有問題的訊息會放到取消佇列中。
    如果您的應用程式之前從未順利執行過,請仔細檢查您的應用程式,以查看您是否可以找到下列任何錯誤:
    • 轉換和編譯問題

      在查看程式碼之前,請先檢查轉換器、編譯器或組譯器以及鏈結編輯器的輸出,以查看是否已報告任何錯誤。 如果您的應用程式無法轉換、編譯/組合或鏈結編輯至載入程式庫,則如果您嘗試呼叫它,它也會無法執行。 如需建置應用程式的相關資訊,以及所需工作控制語言 (JCL) 陳述式的範例,請參閱 開發應用程式

    • 批次和 TSO 程式

      對於批次和 TSO 程式,請檢查是否包含正確的 Stub。 有一個批次 Stub 和兩個 RRS Stub。 如果您使用 RRS ,請確認您沒有搭配使用 MQCMIT 和 MQBACK 呼叫與 CSQBRSTB Stub。 如果您要繼續搭配使用這些呼叫與 RRS ,請使用 CSQBRRSI Stub。

    • CICS 程式集

      若為 CICS 程式,請檢查程式、 IBM MQ CICS Stub 及 CICS Stub 是否以正確的順序鏈結。 此外,請檢查您的程式或交易是否已定義給 CICS

    • IMS 程式

      對於 IMS 程式,請檢查鏈結是否包含程式、 IBM MQ Stub 及 IMS 語言介面模組。 請確定已指定正確的進入點。 如果要使用 IBM MQ,從 IMS 程式動態載入的程式也必須鏈結 Stub 和語言介面模組。

    • 可能的程式碼問題

      如果文件顯示已完成每一個步驟,且沒有錯誤,請考量撰寫應用程式的程式碼。 問題的症狀是否指出失敗的功能,因而指出錯誤的程式碼片段? 如需導致 IBM MQ 應用程式發生問題的一些常見錯誤範例,請參閱步驟 10

    • 應用程式是否從 IBM MQ報告錯誤?

      例如,可能未針對 "gets" 啟用佇列。 它會收到指定此條件的回覆碼,但不會報告它。 請考量應用程式報告任何錯誤或問題的位置。

  7. 問題是否影響網路的特定部分?
    您可能可以識別受問題影響的網路特定部分 (例如,遠端佇列)。 如果遠端佇列管理程式的鏈結無法運作,則訊息無法流向目標佇列管理程式上的目標佇列。
    • 請檢查兩個系統之間的連線是否可用,以及通道起始程式和接聽器是否已啟動。 使用 MQSC PING CHANNEL 指令來檢查連線。
    • 請檢查訊息是否到達傳輸佇列,並檢查傳輸佇列及任何遠端佇列的本端佇列定義。 使用 DISPLAY CHSTATUS 指令的 MQSC BYTSSENT 關鍵字來檢查資料是否沿著通道流動。 使用 DISPLAY QLOCAL (XMITQ) CURDEPTH 來檢查傳輸佇列上是否有要傳送的訊息。 檢查通道兩端是否有診斷訊息通知您訊息已傳送至無法傳送郵件的佇列。
    • 如果您使用 IBM MQ 叢集,請檢查是否已正確設定叢集定義。

    您是否已進行任何可能導致問題發生的網路相關變更? 您是否已變更任何 IBM MQ 定義,或任何 CICSIMS 定義? 請檢查傳輸佇列的觸發屬性。

  8. 問題是在一天中的特定時間發生,還是影響特定使用者?
    如果問題發生在一天中的特定時間,則可能是取決於系統載入。 通常,尖峰系統負載是在上午中和下午中,因此這些期間是最有可能發生負載相依問題的時間。 (如果您的網路延伸跨越多個時區,則尖峰系統負載可能似乎在一天中的某個其他時間發生。) 如果您認為 IBM MQ for z/OS 系統有效能問題,請參閱 處理 z/OS

    如果問題只影響部分使用者,是否因為部分使用者沒有正確的安全授權? 如需 IBM MQ for z/OS所檢查使用者 ID 的相關資訊,請參閱 安全檢查的使用者 ID

  9. 問題是間歇性,還是所有 z/OSCICSIMS 系統都發生問題?
    問題可能是由應用程式互動所造成,或與其他 z/OS 系統相關。

    如果沒有考慮到處理程序可以彼此獨立執行的事實,可能會導致間歇性問題。 例如,在先前處理程序完成之前,程式可能在未指定 WAIT 的情況下發出 MQGET 呼叫。 如果您的應用程式在同步點 (亦即,在確定之前) 嘗試從佇列取得訊息,則您也可能會遇到此類型的問題。

    如果只有在您存取特定 z/OSIMSCICS 系統時才發生問題,請考量此系統的不同之處。 另請考量系統是否已進行任何可能影響其與 IBM MQ互動方式的變更。

  10. 您是否有程式錯誤?
    下列範例顯示執行 IBM MQ 程式時所發生問題的最常見原因。 請考量下列其中一個錯誤可能導致系統發生問題的可能性。
    • 程式會發出 MQSET 來變更佇列屬性,但無法重設佇列的屬性。 例如,將佇列設為 NOTRIGGER。
    • 對佇列屬性做出不正確的假設。 此假設包括假設佇列可以在 MQOPEN-exclusive 時使用 MQOPEN 開啟,並假設佇列不在叢集中。
    • 嘗試在沒有正確安全授權的情況下存取佇列及資料。
    • 鏈結沒有 Stub 或具有錯誤 Stub 的程式 (例如,具有 CICS Stub 的 TSO 程式)。 這可能導致長時間執行的工作單元,或 X'0C4' 或其他異常終止。
    • 在 MQI 呼叫中傳遞不正確或無效的參數; 如果傳遞的參數數目錯誤,則無法嘗試完成完成完成碼及原因碼欄位,且作業會異常終止。 (這是 X'0C4' 異常終止。) 如果您嘗試在比所撰寫的 MQSeries® 版本更舊的版本上執行應用程式,其中部分 MQI 值無效,則可能會發生此問題。
    • 無法正確地將 IBM MQ 模組定義至 z/OS (此錯誤會導致 CSQYASCP 中的 X'0C4' 異常終止)。
    • 無法檢查 MQI 要求的回覆碼。 如果您嘗試在未檢查新回覆碼的 IBM MQ 新版本上執行應用程式,則可能會發生此問題。
    • 無法以稍後 MQI 呼叫所需的正確選項開啟物件,例如使用 MQOPEN 呼叫來開啟佇列,但未指定正確選項來啟用佇列後續 MQGET 呼叫。
    • 無法正確地起始設定 MsgIdCorrelId 。 此錯誤尤其適用於 MQGET。
    • 使用不正確的位址。
    • 在起始設定之前使用儲存體。
    • 傳遞指定了不正確長度的變數。
    • 以錯誤順序傳遞參數。
    • 無法對 RACF®定義正確的安全設定檔和類別。 這可能會停止佇列管理程式,或阻止您執行任何正式作業工作。
    • 依賴已移轉應用程式的預設 MQI 選項。 例如, z/OS 預設為同步點的 MQGET 和 MQPUT。 分散式平台預設值不同步點。
    • 依賴入口網站應用程式正常或異常結束時的預設行為。 在 z/OS上,正常結束會執行隱含 MQCMIT ,異常結束會執行隱含回復。