Skip to main content
对于 PlayFab Multiplayer Servers 的故障排除,您应该首先从 LocalMultiplayerAgent 开始,但在某些情况下您可能需要直接连接。例如:
  • 环境差异: 有时,游戏服务器的行为可能在本地环境和实时服务之间有所不同。
  • 服务器运行状况: 如果服务器被标记为不健康,您可能需要直接连接以进行调查。
  • 直接附加分析器/调试器: 通过直接连接分析代码可能更简单。
  • 实时日志分析: 如果按照存档和检索多人游戏服务器日志中的说明进行操作,则在服务器关闭时会获得日志。要查看实时日志,您可能需要直接连接。
要连接到托管游戏服务器的虚拟机(Windows 或 Linux),您可以使用 playfab.com Web 应用程序上的 “Connect” 按钮获取远程桌面 (RDP)/SSH 凭据。您可以在 Multiplayer Build 的 “Virtual Machines” 页面上看到此按钮。您还可以从 CreateRemoteUser API 调用获取凭据。 连接到虚拟机后,您可以使用操作系统的控制台来监控游戏服务器。MPS 服务使用 Docker 容器来启动游戏服务器进程。要运行 Docker CLI 命令,您需要在 Windows 上使用管理员 PowerShell,在 Linux 上使用 sudo su -
这些是高级 Docker 容器调试说明。使用这些说明可能会破坏您的游戏服务器。我们不建议在运行生产游戏服务器的容器上使用这些命令。我们强烈建议您不要依赖调试容器时看到的行为或信息。仅支持公开记录的 API 和行为,其他内容可能在没有通知的情况下发生变化。

适用于 Windows 和 Linux 的说明

如何开始使用 Docker 容器?

无论您是在 Linux 还是 Windows 上开发,您都应该熟悉 Docker 容器的基础知识。 您可以在此处(外部链接)查看 docker “Get Started” 指南。要了解有关 Windows 容器的更多信息,请参阅 Windows 和容器

一旦我通过 RDP/SSH 进入虚拟机,如何查看在 Docker 容器中运行的游戏服务器列表?

使用 docker ps。您将看到容器名称、哈希以及从虚拟机端口到 Docker 容器端口的端口映射。

如何查看游戏服务器使用的端口?

此信息在 docker ps 上列出:
  • 0.0.0.0:30000->3600/tcp 表示虚拟机上的端口 30000 映射到容器上的 3600 用于 TCP
  • 0.0.0.0:30001->3601/udp 表示虚拟机上的端口 30001 映射到容器上的 3601 用于 UDP
有关更多信息,请参阅 Docker 网络
在 Windows 和 Linux 中,Docker 容器都是 “playfab” Docker 网络的一部分。使用 docker inspect network playfab 查看有关 PlayFab 网络的信息。

如何查看容器的运行时详细信息?

运行 docker ps 获取容器名称后,您可以运行 docker inspect <ContainerName>。您将看到大量信息,如容器状态、主机虚拟机上的卷绑定、端口绑定、传递到容器中的环境变量等。

如何获取游戏服务器的日志?

您可以使用命令 docker logs <nameOrHash>。这些日志包含您的应用程序发送到标准输出/标准错误流的所有内容。请记住,这些日志仅存在于现有容器。如果游戏服务器崩溃,我们在虚拟机中的监控进程会删除该容器并创建一个新的。 最好在游戏服务器内部使用 GSDK 进行日志记录。要了解更多信息,请参阅使用 GSDK 进行日志记录存档和检索多人游戏服务器日志以访问已终止游戏服务器的日志。

我可以连接到运行中的容器”内部”查看正在发生的情况吗?

您可以在 Windows 上执行 docker exec -it <nameOrHash> PowerShell,在 Linux 上执行 docker exec -it <nameOrHash> bash。在那里,您可以访问容器中的命令行进程,在其中您可以发出本机命令来调试/诊断问题。 要使此命令在 Linux 上工作,必须在基础容器中安装 Bash shell。如果没有,可以通过运行 docker exec -it <nameOrHash> sh 来使用 Bourne shell。

如何查看容器上打开的端口?

一旦您连接到容器”内部”,在容器内有命令行进程时,可以在 Windows 上使用 netstat -ano,在 Linux 上使用 netstat -tulpn(请查看前面的说明)。 如果此命令在 Linux 上不起作用,请尝试通过 apt update && apt install net-tools 安装 netstat。在 Linux 上,您可以在虚拟机内部使用 nestatst -tulpn 查看端口确实是打开的。请记住,虚拟机端口与容器端口不同,您可以通过 docker ps 查看容器的端口映射。

Linux 特定说明

如何查看有关容器的诊断信息?

您可以安装 apt install procps,然后运行:
  • ps -aux 查看当前运行的进程(观察您在容器中的主进程 PID 为 1。如果该进程终止,则您的容器不复存在)
  • top 获取实时进程信息

如何监控 TCP 和 UDP 数据包?

  • 考虑使用 TCPdump(外部链接) 之类的工具。
  • 运行 apt update && apt install tcpdump 进行安装。要将其用于特定端口,请对 TCP 运行 tcpdump port 7777,对 UDP 运行 tcpdump udp port 7778
您可以从虚拟机内部和容器内部使用 tcpdump。但是,请确保您监控的是正确的端口值,因为虚拟机端口和容器端口之间存在端口映射。

Windows 特定说明

如何确定资产包中所需的 DLL?

有关说明,请参阅确定所需的 DLL。如果游戏服务器由于缺少一个或多个 DLL 而无法启动,本文也很有用。

LocalMultiplayerAgent 正在崩溃并重启我的 Docker 容器,且没有错误消息。帮助!

发生崩溃时,您会看到类似 Container [ContainerId] exited with exit code 1 的输出。例如:
调试步骤
  • 检查 PF_ConsoleLogs.txt 中是否有任何有用的错误消息
  • 检查您的 .zip 资产包是否包含游戏所需的所有 DLL。有关说明,请参阅确定所需的 DLL
  • 检查 Windows 事件日志,查看是否有关于 Docker 故障的任何有用信息

在 LocalMultiplayerAgent 上,我没有收到任何心跳

以前的尝试可能还有一些残留容器。您可以使用 docker ps -a 查看所有容器,并使用 docker rm -f <containerNameOrTag> 删除它们。

在 Windows 上,如何监控 TCP 和 UDP 数据包?

考虑使用 Wireshark(外部链接) 之类的工具。

如何使用 Visual Studio 调试已部署的多人游戏服务器?

有关说明,请参阅使用 Visual Studio 调试服务器

另请参阅

最后修改于 2026年8月25日