

AWS Mainframe Modernization Service （受管執行期環境體驗） 不再向新客戶開放。對於與 AWS Mainframe Modernization Service （受管執行期環境體驗） 類似的功能，探索 AWS Mainframe Modernization Service （自我管理體驗）。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[AWS 大型主機現代化可用性變更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 故障診斷錯誤：等待資料集名稱解除鎖定時逾時
<a name="ba-blusam-timeout"></a>

當您看到環境中的另一個應用程式在共用資料集上保持鎖定時，此頁面說明如何解決錯誤。
+ 引擎：大型主機的 AWS 轉換
+ 元件： Blusam

如果您在 AWS 大型主機現代化應用程式的 Amazon CloudWatch logs中看到此錯誤，使用大型主機引擎的 AWS Transform，並在具有高可用性模式的環境中執行，則表示另一個應用程式正在鎖定共用資料集。一般而言，如果其他應用程式當機或失敗，而且不會釋放鎖定，就會發生這種情況。

尋找失敗的應用程式，並檢查是否使用錯誤訊息中提到的相同資料集。檢查應用程式是否在具有高可用性模式的執行期環境中執行。引發逾時例外狀況的應用程式無法繼續，且會顯示 `Failed` 狀態。

## 常見原因
<a name="ba-blusam-timeout-cause"></a>

應用程式`example-app-1`會嘗試鎖定寫入操作`example-record-1`的記錄。此操作會在擁有 `example-dataset-1`的資料集 上建立鎖定`example-record-1`，並在`example-record-1`其本身建立鎖定。現在另一個應用程式 `example-app-2`嘗試鎖定相同的記錄 `example-record-1`。資料集和記錄已經鎖定，因此 會`example-app-2`等待鎖定釋放。如果當`example-app-1`機，資料集上的保留鎖定`example-dataset-1`仍然存在，這會導致`example-app-2`取消其寫入嘗試並引發逾時例外狀況。此死結情況可防止所有應用程式到達 `example-dataset-1`。

## Resolution
<a name="ba-blusam-timeout-resolution"></a>

若要立即解決這種情況，您可以強制釋放鎖定。若要防止未來發生類似情況，您可以設定兩個參數來控制Blusam自動修復機制。

## 強制鎖定釋放
<a name="ba-blusam-timeout-force"></a>

Blusam 鎖定管理員使用 Amazon ElastiCache (Redis OSS) 在應用程式之間提供共用鎖定。若要在 ElastiCache 中釋放鎖定，請使用 Redis CLI 公用程式。您無法刪除個別記錄鎖定。您必須從擁有的資料集移除所有鎖定。請完成下列步驟：

1. 使用下列命令連線至 ElastiCache：

   ```
   redis-cli -h {{hostname}} -p {{port}}
   ```

   您可以在 ElastiCache 主控台中找到 ElastiCache 的詳細資訊，網址為 [ https：//https://console.aws.amazon.com/elasticache/](https://console.aws.amazon.com/elasticache/)。

1. 輸入您的密碼。

1. 輸入您要執行的命令，如下所示：    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/ba-blusam-timeout.html)

## 設定Blusam自動修復機制
<a name="ba-blusam-timeout-auto-repair"></a>

Blusam 鎖定管理員包含自動修復機制，可防止資料集或記錄發生死結。您可以在應用程式定義 (`application-main.yml`) 中調整下列參數，以設定自動修復機制：
+ `locksDeadTime`：是指應用程式可以保留鎖定的時間上限。當這段時間過後，系統會宣告鎖定已過期並立即釋放。`locksDeadTime` 值以毫秒為單位，預設值為 1000。
+ `locksCheck`：定義用於檢查Blusam鎖定的鎖定管理員策略。ElastiCache 中的所有Blusam鎖定都會加上時間戳記，並具有過期時間。`locksCheck` 參數值會判斷是否移除過期的鎖定。
  + `off`：隨時都不會執行檢查。可能會發生死鎖。(不建議使用)
  + `reboot`：當在 AWS Mainframe Modernization 執行時間環境中執行 AWS 的 Mainframe Modernization 應用程式執行個體啟動或重新啟動時，會執行檢查。所有過期的鎖定都會立即釋出。（預設）
  + `timeout`：會在 AWS 大型主機現代化執行時間環境中執行 AWS 的 Mainframe Modernization 應用程式執行個體啟動或重新啟動，或在嘗試鎖定資料集期間逾時過期時執行檢查。過期的鎖定會立即釋放。

如需大型主機應用程式 AWS 轉換的應用程式定義詳細資訊，請參閱 [AWS 大型主機應用程式定義範例的轉換](applications-m2-definition.md#applications-m2-definition-ba)。

## Blusam 鎖定管理員
<a name="ba-blusam-timeout-locks-mgr"></a>

在 AWS 大型主機現代化執行期環境中使用高可用性模式的情況下，大型主機應用程式的 AWS 轉換可能會部署多次。對於處理Blusam資料集的應用程式，可能會發生並行存取問題。Blusam 鎖定管理員可確保資料完整性，並使用 ElastiCache 在應用程式之間提供共用鎖定，以管理對記錄和資料集的讀取和寫入存取。此機制允許多個應用程式同時讀取記錄，並確保一次只有一個應用程式寫入記錄。

### 寫入鎖定
<a name="ba-blusam-timeout-locks-mgr-write"></a>

若要更新或刪除特定記錄，應用程式必須先鎖定擁有記錄的資料集，然後鎖定記錄本身。當記錄鎖定時，會釋出資料集鎖定，且相同資料集的其他記錄可供使用。當更新或刪除操作完成時，會釋放保留的記錄鎖定。如果定義的應用程式政策允許等待發行，則一次只有一個應用程式可以更新記錄，這會封鎖其他應用程式讀取或寫入，直到鎖定釋放為止。

### 讀取鎖定
<a name="ba-blusam-timeout-locks-mgr-read"></a>

只要記錄或資料集上沒有寫入鎖定，多個應用程式就可以同時讀取相同的記錄。若要鎖定寫入操作的記錄，必須釋放所有讀取鎖定。

**注意**  
Blusam 鎖定管理員會使用相同的鎖定機制，處理指定應用程式中多個執行緒的存取。