- **環境差異:**有時候,遊戲伺服器的行為在本機環境和線上服務之間可能有所不同。
- **伺服器健康情況:**您可能需要直接連線,以調查伺服器是否被標示為狀況不良。
- **直接附加分析工具/偵錯工具:**透過直接連線分析程式碼可能更簡單。
- **即時記錄分析:**如果您依照封存和擷取多人遊戲伺服器記錄中的指示,您會在伺服器關閉時取得記錄。若要查看即時記錄,您可能會想要直接連線。
這些是進階的 Docker 容器偵錯指示。使用這些指示可能會破壞您的遊戲伺服器。我們不建議在執行生產遊戲伺服器的容器上使用這些命令。我們強烈建議您不要依賴在偵錯容器時看到的任何行為或資訊。只支援公開記載的 API 和行為,其他內容可能會在未通知的情況下變更。
適用於 Windows 和 Linux 的指示
如何開始使用 Docker 容器?
無論您是在 Linux 還是 Windows 上開發,都應該熟悉 Docker 容器的基本概念。 您可以在此處 (外部連結) 檢視 docker「Get Started」指南。若要深入了解 Windows 容器,請參閱 Windows 和容器。透過 RDP/SSH 進入 VM 後,如何查看在 Docker 容器中執行的遊戲伺服器清單?
使用 docker ps。您會看到容器名稱和雜湊,以及從 VM 連接埠到 Docker 容器連接埠的連接埠對應。如何查看遊戲伺服器使用的連接埠?
此資訊列在 docker ps 上:0.0.0.0:30000->3600/tcp表示 VM 上的連接埠 30000 已針對 TCP 對應至容器上的 36000.0.0.0:30001->3601/udp表示 VM 上的連接埠 30001 已針對 UDP 對應至容器上的 3601
在 Windows 和 Linux 中,Docker 容器都屬於 “playfab” Docker 網路。使用
docker inspect network playfab 檢視 PlayFab 網路的相關資訊。如何查看容器的執行階段詳細資料?
執行 docker ps 取得容器名稱後,您可以執行 docker inspect <ContainerName>。您會看到許多資訊,例如容器的狀態、主機 VM 上的磁碟區繫結、連接埠繫結、傳入容器的環境變數等。如何取得遊戲伺服器的記錄?
您可以使用命令 docker logs <nameOrHash>。這些記錄包含您的應用程式傳送至標準輸出/標準錯誤串流的所有內容。請記住,這些記錄只存在於現有的容器中。如果您的遊戲伺服器損毀,VM 中的監視處理序會刪除該容器並建立新的容器。 較佳的做法是使用 GSDK 從遊戲伺服器內部進行記錄。若要深入了解,請參閱使用 GSDK 記錄,並參閱封存和擷取多人遊戲伺服器記錄以存取已終止遊戲伺服器的記錄。我可以連線到執行中容器的「內部」查看發生了什麼事嗎?
您可以在 Windows 上執行 docker exec -it <nameOrHash> PowerShell,在 Linux 上執行 docker exec -it <nameOrHash> bash。在那裡,您可以存取容器中的命令列處理序,並發出原生命令來偵錯/診斷問題。 若要讓此命令在 Linux 上運作,您的基礎容器中必須安裝 Bash 殼層。如果沒有安裝,您可以執行 docker exec -it <nameOrHash> sh 來使用 Bourne 殼層。如何查看容器上開放的連接埠?
連線到容器「內部」後,當您在容器內有命令列處理序時 (請查看先前的指示),可以在 Windows 上使用 netstat -ano,在 Linux 上使用 netstat -tulpn。 如果此命令在 Linux 上無法運作,請嘗試透過 apt update && apt install net-tools 安裝 netstat。在 Linux 上,您可以在 VM 內使用 nestatst -tulpn 查看連接埠是否確實開放。請記得,VM 連接埠與容器連接埠不同,您可以使用 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 失敗的有用資訊
