调试 Amazon GameLift Servers 队组问题 - Amazon GameLift Servers
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

调试 Amazon GameLift Servers 队组问题

本主题提供有关如何解决Amazon GameLift Servers托管车 EC2 队问题的指导。

实例集创建问题

当您创建托管 EC2 队列时,该Amazon GameLift Servers服务会启动创建队列的工作流程,在安装了游戏服务器版本的情况下部署 EC2 实例,并在每个实例上启动游戏服务器进程。有关详细说明,请参阅Amazon GameLift Servers舰队创建的工作原理。实例集在进入活动状态之前无法托管游戏会话和玩家。

您可以通过确定出现问题的实例集创建阶段并查看实例集创建事件和日志,来调试阻止实例集激活的问题。如果日志未提供有用信息,则问题可能是由内部服务错误造成的。在这种情况下,请再次尝试创建实例集。如果问题仍然存在,请尝试重新上传游戏生成包,以解决可能的文件损坏问题。您还可以联系 Amazon GameLift Servers 支持或在论坛上发布问题。

下载和验证生成包

在此阶段,Amazon GameLift Servers获取您上传的游戏服务器版本,提取文件并运行所有安装脚本。如果实例集创建在这些阶段失败,请查看实例集事件和日志以查明问题。可能的原因包括:

  • Amazon GameLift Servers无法获取压缩后的构建文件(事件FLEET_BINARY_DOWNLOAD_FAILED)。验证版本的存储位置是否可以访问,是否正在创建与版本相同的 Amazon Web Services 区域 队列,以及是否Amazon GameLift Servers具有访问该队列的正确权限。

  • Amazon GameLift Servers无法提取生成文件(事件FLEET_CREATION_EXTRACTING_BUILD)。

  • 生成包文件中的安装脚本未能成功完成(事件 FLEET_CREATION_FAILED_INSTALLER)。

构建实例集资源

此阶段的问题通常涉及实例集资源的分配和部署。可能的原因包括:

  • 请求的实例类型不可用。

  • 请求的实例集类型(竞价型或按需型)不可用。

激活游戏服务器进程

在此阶段,Amazon GameLift Servers正在尝试执行多项任务并测试关键要素,包括游戏服务器的可行性、运行时配置设置以及游戏服务器使用服务器 SDK 与Amazon GameLift Servers服务连接的能力。

注意

在此阶段,您可以远程访问实例集实例以进一步调查问题。请参阅远程连接到 Amazon GameLift Servers 舰队实例

可能的问题包括:

  • 服务器进程未开始运行。这表明实例集的运行时配置设置有问题(事件 FLEET_VALIDATION_LAUNCH_PATH_NOT_FOUNDFLEET_VALIDATION_EXECUTABLE_RUNTIME_FAILURE)。请验证您是否正确设置了启动路径和可选启动参数。

  • 服务器进程开始运行,但实例集无法激活。如果服务器进程成功启动并运行,但队列未变为 “活动” 状态,则可能的原因是服务器进程无法与Amazon GameLift Servers服务通信。请验证您的游戏服务器是否正在进行以下正确的服务器 SDK 调用(请参阅初始化服务器进程):

    • 服务器进程无法初始化(事件 SERVER_PROCESS_SDK_INITIALIZATION_TIMEOUT)。服务器进程调用 InitSdk() 失败。

    • 服务器进程无法在准备好托管游戏会话(事件SERVER_PROCESS_PROCESS_READY_TIMEOUT)Amazon GameLift Servers时发出通知。服务器进程已初始化,但没有及时调用 ProcessReady()

  • VPC 对等连接请求失败。对于使用 VPC 对等连接创建的实例集(请参阅使用新实例集设置 VPC 对等连接),VPC 对等连接在此激活阶段中完成。如果 VPC 对等连接由于任何原因失败,新实例集将无法转入激活状态。您可以通过调describe-vpc-peering-connections用来跟踪对等互连请求的成功或失败。请务必检查是否存在有效的 VPC 对等授权(describe-vpc-peering-authorizations,因为授权仅在 24 小时内有效。

服务器进程问题

服务器进程启动但快速失败或者报告运行状况不佳。

不同于游戏构建中的问题,同时在实例上尝试运行了过多服务器进程时可能会发生这种情况。并发进程的最佳数目取决于实例类型和您的游戏服务器的资源要求。请尝试减少并发进程数量,该值在实例集的运行时配置中设置,以查看性能是否有所改进。您可以使用Amazon GameLift Servers控制台(编辑队列的容量分配设置)或通过调用 Amazon CLI 命令来更改队列的运行时配置update-runtime-configuration

实例集删除问题

由于最大实例计数而无法终止实例集。

错误消息指示正在删除的实例集仍有活动的实例,这种情况是不允许的。您必须首先将实例集缩减到零个活动实例。要执行此操作,可以手动将实例集所需的实例计数设置为“0”,然后等待缩减生效。请务必关闭自动扩展,否则会抵消手动设置。

VPC 操作未获授权。

此问题仅适用于您专门为其创建 VPC 对等连接的队列(请参阅。的 VPC 对等互连 Amazon GameLift Servers 之所以出现这种情况,是因为删除队列的过程还包括删除队列的 VPC 和所有 VPC 对等连接。 您必须首先通过调用 Amazon GameLift Servers CreateVpcPeeringAuthorization() 的服务 API 或使用 Amazon CLI 命令来获得授权create-vpc-peering-authorization。获得授权之后,您就可以删除该实例集。

Amazon GameLift ServersRealtime舰队问题

僵尸游戏会话:这些会话启动和运行游戏,但永不结束。

您可能会观察到此问题在以下任意场景中出现:

  • 队组的 Realtime Server 未选取脚本更新

  • 实例集快速达到最大容量,但在玩家活动(例如新游戏会话请求)减少时不缩减。

这几乎可以肯定是无法在您的 Realtime 脚本中成功调用 processEnding 的结果。虽然实例集进入活动状态并且启动了游戏会话,但没有方法可以停止它们。因此,运行游戏会话的 Realtime Server 永远不会释放资源来启动新会话,而新游戏会话只能在新 Realtime Server 有资源时启动。此外,对 Realtime 脚本的更新不影响已经运行的游戏会话,仅影响新的会话。

为了防止出现这种情况,脚本需要提供一种机制来触发 processEnding 调用。如 Amazon GameLift ServersRealtime脚本示例中所示,一种方法是编写空闲会话超时,如果在特定时间长度内没有玩家连接,则脚本将结束当前游戏会话。

但是,如果您出现了这种情况,还有多种解决方法可以让 Realtime Server 摆脱卡顿的状况。诀窍是触发Realtime服务器进程(或底层队列实例)重启。在这种情况下,会Amazon GameLift Servers自动为您关闭游戏会话。一旦释放 Realtime Server,它们就可以使用 Realtime 脚本的最新版本来启动新游戏会话。

根据问题的普遍性,有几种方法可以做到这一点:

  • 缩减整个实例集。此方法执行起来最简单,但具有扩散效应。将实例集缩减为零个实例,等待实例集完全缩减,然后将其扩展回。这将清除所有现有游戏会话,并让您使用最近更新的 Realtime 脚本来从头开始。

  • 远程访问该实例并重新启动该过程。如果您只有几个进程需要修复,这是一个很好的选项。如果您已登录到该实例,例如用于跟踪日志或调试,则这可能是最快的方法。请参阅远程连接到 Amazon GameLift Servers 舰队实例

如果您选择不在 Realtime 脚本中包含调用 processEnding 的方法,则可能会出现一些棘手的情况,即使队组进入活动状态并且游戏会话已启动。首先,正在运行的游戏会话不结束。因此,游戏会话永远不会释放正在运行的服务器进程来启动新游戏会话。其次,Realtime Server 不会选取任何脚本更新。