- 环境差异: 有时,游戏服务器的行为可能在本地环境和实时服务之间有所不同。
- 服务器运行状况: 如果服务器被标记为不健康,您可能需要直接连接以进行调查。
- 直接附加分析器/调试器: 通过直接连接分析代码可能更简单。
- 实时日志分析: 如果按照存档和检索多人游戏服务器日志中的说明进行操作,则在服务器关闭时会获得日志。要查看实时日志,您可能需要直接连接。
这些是高级 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 用于 TCP0.0.0.0:30001->3601/udp表示虚拟机上的端口 30001 映射到容器上的 3601 用于 UDP
在 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。
Windows 特定说明
如何确定资产包中所需的 DLL?
有关说明,请参阅确定所需的 DLL。如果游戏服务器由于缺少一个或多个 DLL 而无法启动,本文也很有用。LocalMultiplayerAgent 正在崩溃并重启我的 Docker 容器,且没有错误消息。帮助!
发生崩溃时,您会看到类似Container [ContainerId] exited with exit code 1 的输出。例如:
- 检查 PF_ConsoleLogs.txt 中是否有任何有用的错误消息
- 检查您的 .zip 资产包是否包含游戏所需的所有 DLL。有关说明,请参阅确定所需的 DLL。
- 检查 Windows 事件日志,查看是否有关于 Docker 故障的任何有用信息
