解析協同作業死鎖

死鎖是一種狀況,其中兩個以上程序無法繼續,因為每一個程序都在等待其他程序繼續執行。 死鎖是協同作業中事件隔離提供並行控制所造成的一種不良副作用。 如需事件隔離的詳細資訊, 請參閱 Collaboration Development Guide

圖 77 說明因下列事件順序,而造成兩個作用中協同作業群組間發生的死鎖:

  1. 當 T1 時間,「協同作業 A1」收到事件 E1,然後對「協同作業 B2」發出服務呼叫並傳送 E1 的子項商業物件。 「協同作業 A1」等待服務呼叫完成。
  2. 當 T2 時間,「協同作業 B1」收到事件 E2,然後對「協同作業 A2」發出服務呼叫並傳送 E2 的子項商業物件。 「協同作業 A2」等待服務呼叫完成。
  3. 當 T3 時間,「協同作業 B2」正在等待「協同作業 B1」, 因為 B2 及 B1 具有相同的埠連結,且在 B2 的事件抵達之前已遞送 B1 的事件。
  4. 當 T4 時間,「協同作業 A2」正在等待「協同作業 A1」, 因為 A2 及 A1 具有相同的埠連結,且在 B1 的事件抵達之前已遞送 A1 的事件。

此時,所有協同作業都無法向前移動。

註:
埠連結包含商業物件類型與連接器名稱。 如需埠連結的詳細資訊,請參閱 Collaboration Development Guide

圖 77. 協同作業群組之間的死鎖


本節包含下列主題:

"偵測協同作業死鎖的步驟"

"偵測群組協同作業死鎖的步驟"

"修正協同作業死鎖的步驟"

偵測協同作業死鎖的步驟

依預設,當您啟動 InterChange Server Express 時,InterChange Server Express 系統會自動執行死鎖偵測。 然而,在執行死鎖偵測時,若協同作業群組含有許多協同作業物件,則可以延遲 InterChange Server Express 的啟動, 因為 InterChange Server Express 必須遍訪群組中的所有協同作業物件以判定群組中是否有死鎖。 即使沒有任何死鎖存在,這也會造成啟動緩慢

您可以將 InterChange Server Express 系統配置為不執行死鎖偵測。 如果您這麼做,系統將不先檢查死鎖就啟動協同作業群組。 這可能可以讓 InterChange Server Express 的啟動更快速。 然而,若沒有執行死鎖偵測且有死鎖存在,則稍後傳送至協同作業的事件可能會失敗。

「系統管理程式」不提供設定 DEADLOCK_DETECTOR_CHECK 配置參數的能力。相反的,若要設定此配置參數, 您必須編輯InterchangeSystem.cfg 檔案並變更此檔案中的參數值。

請執行下列步驟,以配置 InterChange Server Express 系統來偵測死鎖:

  1. 開啟 InterchangeSystem.cfg 檔案。下列指令行可定義檔案中的 DEADLOCK_DETECTOR_CHECK 參數:

    <tns:name>DEADLOCK_DETECTOR_CHECK</tns:name>

    <tns:value xml:space="preserve">false</tns:name>

  2. 如果您要執行死鎖偵測,請將 false 值變更為 true
  3. 如果您不要執行死鎖偵測,請將值變更為 false

偵測群組協同作業死鎖的步驟

請執行下列其中一項步驟,以檢查群組協同作業死鎖:

修正協同作業死鎖的步驟

請執行下列步驟,以修正協同作業死鎖:

  1. 慢慢地關閉所有其他協同作業。
  2. 立即關閉伺服器。如需關閉 InterChange Server Express 系統的詳細資訊,請參閱"關閉 InterChange Server Express"
  3. 重新啟動系統。重新啟動系統時,會自動啟動造成死鎖的已停止協同作業, 並重新訂閱它所支援的所有商業物件。 重新遞送造成協同作業進入死鎖的商業物件。 因為死鎖與時間有相依關係,所以協同作業無法進入另一個死鎖。 當系統發生死鎖時,您無法載入完全相同的伺服器及隔離已經有的順序性。
  4. 重新啟動系統之後,請關閉所涉及的協同作業並重新連結埠,使不再發生此狀況。

防止協同作業死鎖的步驟

您可以防止協同作業死鎖,方法是在「系統管理程式」中之伺服器配置畫面的「資料庫」標籤上,配置死鎖重試設定。

請執行下列步驟,以配置死鎖重試機制:

  1. 在「系統管理程式」中,用滑鼠右鍵按一下「InterChange Server 元件管理」檢視畫面中的伺服器,然後按一下編輯配置。 「系統管理程式」視窗的右上方區段變成一個工具,您可以在此工具中編輯 InterchangeSystem.cfg 檔。
  2. 按一下資料庫標籤。有一個對話框會出現在「系統管理程式」視窗右上方區段,您可在此處輸入必要的參數來配置系統層次的資料庫配置 (請參閱圖 78)。

    圖 78. 編輯配置畫面,資料庫標籤


  3. 資料庫重試次數上限欄位中輸入一個數字,代表萬一發生死鎖,您要伺服器執行的重試次數上限。
  4. 死鎖重試間隔欄位中輸入一個數字,代表您要系統在重試之前等待的秒數。

Copyright IBM Corp. 2004