偵錯亞馬遜GameLift叢集問題 - Amazon GameLift

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

偵錯亞馬遜GameLift叢集問題

本主題針對 Amazon GameLift 受管主機解決方案提供叢集組態問題的指導。如需進一步的疑難排解,您可以在機群啟用後遠端存取機群執行個體。請參閱 遠端連線至 Amazon GameLift 叢集執行個體

機群建立問題

建立叢集後,Amazon GameLift 服務會啟動工作流程,在每個叢集的位置部署新執行個體,並準備執行您的遊戲伺服器。如需詳細描述,請參閱亞馬遜GameLift車隊創建如何運作。艦隊無法主持遊戲工作階段和玩家,直到它達到作用中狀態。本節討論阻止艦隊活躍的最常見問題。

下載和驗證

在此階段,如果解壓縮的建置檔案發生問題、安裝指令碼無法執行,或是執行階段組態中指定的可執行檔未包含在建置檔案中,叢集建立可能會失敗。Amazon GameLift 提供與這些問題相關的日誌。

如果日誌未顯示出問題,問題有可能是因為內部服務錯誤。在這種情況下,請再次嘗試建立機群。如果問題仍存在,請考慮重新上傳遊戲建置 (以防檔案已損毀)。您也可以聯繫亞馬遜GameLift支持或在論壇上發布問題。

建置

在建置階段期間導致失敗的問題,幾乎絕對是因為遊戲建置檔案和/或安裝指令碼的問題。確認上傳到 Amazon GameLift 的遊戲建置檔案可以安裝在執行適當作業系統的機器上。請務必使用全新的作業系統安裝,而不是現有的開發環境。

啟用

最常見的叢集建立問題會在啟用階段期間發生。在此階段,會測試許多元素,包括遊戲伺服器的可行性、執行階段組態設定,以及遊戲伺服器使用 Server SDK 與 Amazon GameLift 服務互動的能力。叢集啟用期間會發生的常見問題包括:

伺服器程序無法啟動。

首先,請檢查您是否已在叢集執行時間組態中正確設定啟動路徑和選用的啟動參數。您可以使用 [叢集詳細資料] 頁面詳細資訊) 區段或呼叫AWS CLI指令來檢視叢集目前的執行階段組態describe-runtime-configuration。如果執行時間組態看起來正確,請檢查遊戲組建檔案和/或安裝指令碼的問題。

伺服器程序已啟動,但叢集無法啟用。

如果伺服器處理序啟動並成功執行,但叢集未移至作用中狀態,則可能的原因是伺服器處理序無法通知 Amazon GameLift 已準備好主持遊戲工作階段。檢查您的遊戲伺服器是否正確呼叫伺服器 API 動作 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 對等連線。 您必須先透過呼叫亞馬遜GameLift服務 API CreateVpcPeeringAuthorization() 或使用 AWS CLI 命令來取得授權create-vpc-peering-authorization。一旦您擁有授權,您便可以刪除叢集。

實時服務器車隊問題

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

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

  • 車隊的實時服務器不會拾取腳本更新。

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

這幾乎可以肯定是無法在實時腳本processEnding中成功調用的結果。雖然叢集已進入作用中狀態,且遊戲工作階段也已啟動,但卻沒有任何方法停止他們。因此,運行遊戲會話的實時服務器永遠不會釋放以啟動新會話,並且只有在新的實時服務器運行時才能啟動新的遊戲會話。此外,Realtime 指令碼的更新不會影響已經執行的遊戲工作階段,只會影響遊戲工作階段。

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

但是,如果您確實陷入這種情況,則有幾種解決方法可以解決您的實時服務器。訣竅是觸發實時服務器進程(或基礎艦隊實例)重新啟動。在此情況下,會GameLift自動為您關閉遊戲工作階段。釋放實時服務器後,他們可以使用最新版本的實時腳本開始新的遊戲會話。

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

  • 向下擴展整個叢集。此方法是最簡單的方法,但其影響範圍也相當大。將整個叢集向下擴展至零個執行個體,等待叢集完全向下擴展,然後再往回向上擴展。這將清除所有現有的遊戲會話,並讓您從最近更新的實時腳本重新開始。

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

如果您選擇不包括在實時腳本processEnding中調用的方式,即使艦隊處於活動狀態並且遊戲會話啟動時,也可能會發生一些棘手的情況。首先,正在執行的遊戲工作階段不會結束。因此,執行該遊戲工作階段的伺服器程序永遠不會進行釋放,以啟動新的遊戲工作階段。其次,實時服務器不會獲取任何腳本更新。