除錯 Amazon GameLift 機群問題 - Amazon GameLift

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

除錯 Amazon GameLift 機群問題

本主題提供如何解決 Amazon GameLift 受管EC2機群問題的指引。

機群建立問題

當您建立受管EC2機群時,Amazon GameLift 服務會啟動建立機群的工作流程、在已安裝遊戲伺服器建置的情況下部署EC2執行個體,以及在每個執行個體上啟動遊戲伺服器程序。如需詳細說明,請參閱 Amazon GameLift 機群建立的運作方式。機群在達到作用中狀態之前,無法託管遊戲工作階段和玩家。

您可以透過識別發生問題的機群建立階段並檢閱機群建立事件和日誌,來偵錯防止機群處於作用中狀態的問題。如果日誌未提供有用的資訊,問題可能是由於內部服務錯誤所致。在此情況下,請嘗試再次建立機群。如果問題仍然存在,請嘗試重新上傳遊戲組建,以解決可能的檔案損毀)。您也可以聯絡 Amazon GameLift 支援或在論壇上發佈問題。

下載並驗證建置

在此階段,Amazon GameLift 會取得您上傳的遊戲伺服器建置、擷取檔案,並執行任何安裝指令碼。如果機群建立在這些階段失敗,請查看機群事件和日誌以找出問題。可能的原因包括:

  • Amazon GameLift 無法取得壓縮建置檔案 (事件 FLEET_BINARY_DOWNLOAD_FAILED)。確認可以存取建置的儲存位置、您要在與建置 AWS 區域 相同的 中建立機群,以及 Amazon GameLift 具有正確的存取許可。

  • Amazon GameLift 無法擷取建置檔案 (事件 FLEET_CREATION_EXTRACTING_BUILD)。

  • 建置檔案中的安裝指令碼無法成功完成 (事件 FLEET_CREATION_FAILED_INSTALLER)。

建置機群資源

此階段的問題通常涉及機群資源的配置和部署。可能的原因包括:

  • 請求的執行個體類型無法使用。

  • 請求的機群類型 (Spot 或隨需) 無法使用。

啟用遊戲伺服器程序

在此階段,Amazon 正在 GameLift 嘗試許多任務並測試金鑰元素,包括遊戲伺服器的可行性、執行期組態設定,以及遊戲伺服器使用伺服器 與 Amazon GameLift 服務連線的能力SDK。

注意

在此階段,您可以遠端存取機群執行個體,以進一步調查問題。請參閱 遠端連線至 Amazon GameLift 機群執行個體

可能的問題包括:

  • 伺服器程序不會開始執行。這表示機群的執行期組態設定 (事件 FLEET_VALIDATION_LAUNCH_PATH_NOT_FOUNDFLEET_VALIDATION_EXECUTABLE_RUNTIME_FAILURE。確認您已正確設定啟動路徑和選用的啟動參數。

  • 伺服器程序開始執行,但機群無法啟用。如果伺服器程序啟動並成功執行,但機群未移至作用中狀態,則可能是伺服器程序無法與 Amazon GameLift 服務通訊。確認您的遊戲伺服器進行這些正確的伺服器SDK呼叫 (請參閱 初始化伺服器程序):

    • 伺服器程序無法初始化 (事件 SERVER_PROCESS_SDK_INITIALIZATION_TIMEOUT)。伺服器程序未成功呼叫 InitSdk()

    • 伺服器程序無法在準備好託管遊戲工作階段 (事件 SERVER_PROCESS_PROCESS_READY_TIMEOUT) GameLift 時通知 Amazon。伺服器程序已初始化,但未ProcessReady()及時呼叫。

  • VPC 對等連線請求失敗。對於使用VPC對等連線建立的機群 (請參閱 使用新機群設定 VPC 對等),VPC對等是在此啟動階段期間完成的。如果VPC互連因任何原因失敗,新機群將無法移至作用中狀態。您可以呼叫 來追蹤對等請求的成功或失敗describe-vpc-peering-connections。請務必檢查是否存在有效的VPC對等授權 (describe-vpc-peering-authorizations,因為授權僅在 24 小時內有效。

伺服器程序問題

伺服器程序已啟動,但很快便失敗或報告運作狀態不佳。

除了您的遊戲組建發生問題外,若您嘗試在執行個體上同時執行太多伺服器程序,便可能產生此結果。並行程序的最佳數量取決於執行個體類型和您遊戲伺服器的資源需求。請嘗試減少同時程序的數量 (在叢集的執行時間組態中設定),查看效能是否改善。您可以使用 Amazon GameLift 主控台 (編輯機群的容量配置設定) 或呼叫 AWS CLI 命令 來變更機群的執行期組態update-runtime-configuration

機群刪除問題

叢集因執行個體數量上限而無法終止。

此錯誤訊息指出要刪除的叢集由於仍有作用中的執行個體,因此不允許刪除。您必須先將叢集向下擴展是零個作用中執行個體。您可以透過手動將叢集的所需執行個體數設為 "0",接著等待向下擴展生效,來執行此作業。請務必關閉自動調整規模,因為這會阻止手動設定。

VPC 動作未獲授權。

此問題僅適用於您特別為 建立VPC對等連線的機群 (請參閱 適用於亞馬遜的 VPC 對等互連 GameLift。 此案例的發生原因是刪除機群的程序也包括刪除機群VPC和任何對VPC等連線。 您必須先呼叫 Amazon GameLift 服務 API CreateVpcPeeringAuthorization() 或使用 AWS CLI命令 取得授權create-vpc-peering-authorization。一旦您擁有授權,您便可以刪除叢集。

即時伺服器機群問題

僵屍遊戲工作階段:他們可以順利啟動及執行遊戲,但永遠不會結束。

您可能會在以下案例中觀察到此問題:

  • 機群的即時伺服器不會擷取指令碼更新。

  • 叢集快速地到達容量上限,且並未在使用者活動 (例如新的遊戲工作階段請求) 減少時向下擴展。

這幾乎肯定是由於無法在即時指令碼processEnding中成功呼叫所致。雖然叢集已進入作用中狀態,且遊戲工作階段也已啟動,但卻沒有任何方法停止他們。因此,執行遊戲工作階段的即時伺服器永遠不會釋出,以啟動新的遊戲工作階段,而且新的遊戲工作階段只能在新的即時伺服器啟動時啟動。此外,即時指令碼的更新不會影響已執行的遊戲工作階段,只會影響遊戲工作階段。

若要避免發生這種情況,指令碼需要提供觸發 processEnding 呼叫的機制。如實時服務器腳本示例中所示,其中一種方式是編寫閒置工作階段逾時的程式,在其中設定在特定時間長度內,若沒有任何玩家進行連線,便讓指令碼結束目前的遊戲工作階段。

不過,如果您確實遇到這種情況,有一些解決方法可讓您的即時伺服器停止運作。該技巧是觸發即時伺服器程序,或基礎機群執行個體重新啟動。在此情況下, GameLift 會自動為您關閉遊戲工作階段。即時伺服器釋出後,他們可以使用最新版本的即時指令碼啟動新的遊戲工作階段。

取決於此問題存在的普遍狀況,有幾種方法可達到此目的:

  • 向下擴展整個叢集。此方法是最簡單的方法,但其影響範圍也相當大。將整個叢集向下擴展至零個執行個體,等待叢集完全向下擴展,然後再往回向上擴展。這將清除所有現有的遊戲工作階段,並讓您開始使用最新的即時指令碼。

  • 遠端存取執行個體並重新啟動程序。若您只有少量的程序需要修復,此為良好的選項。若您已登入執行個體 (例如為了進行結尾記錄日誌或偵錯),這可能會是最快的方法。請參閱 遠端連線至 Amazon GameLift 機群執行個體

如果您選擇不在即時指令碼processEnding中包含呼叫方式,即使機群處於作用中狀態並啟動遊戲工作階段,仍可能會發生一些棘手的情況。首先,正在執行的遊戲工作階段不會結束。因此,執行該遊戲工作階段的伺服器程序永遠不會進行釋放,以啟動新的遊戲工作階段。其次,即時伺服器不會接收任何指令碼更新。