- 環境の違い: 場合によっては、ローカル環境とライブ サービスの間でゲーム サーバーの動作が異なることがあります。
- サーバーの健全性: サーバーが unhealthy とフラグ付けされている場合、それを調査するために直接接続する必要があるかもしれません。
- プロファイラー/デバッガーの直接アタッチ: 直接接続経由でコードをプロファイリングする方が簡単なことがあります。
- リアルタイム ログ分析: マルチプレイヤー サーバー ログのアーカイブと取得 の手順に従うと、サーバーがシャットダウンしたときにログを取得できます。リアルタイム ログを表示するには、直接接続することを検討してください。
これらは高度な Docker コンテナー デバッグの手順です。これらの手順を使用するとゲーム サーバーが壊れる可能性があります。運用中のゲーム サーバーを実行しているコンテナーでこれらのコマンドを使用することはお勧めしません。コンテナーをデバッグ中に表示される動作や情報に依存しないことを強くお勧めします。公式にドキュメント化された API と動作のみがサポートされ、その他は予告なく変更される可能性があります。
Windows と Linux 両方の手順
Docker コンテナーの始め方
Linux または Windows のどちらで開発していても、Docker コンテナーの基本を理解しておくべきです。 docker の “Get Started” ガイドを こちら (外部リンク) で表示できます。Windows Containers の詳細については、Windows and containers を参照してください。VM に RDP/SSH した後、Docker コンテナーで実行中のゲーム サーバーのリストを見るには?
docker ps を使用します。コンテナー名とハッシュ、および VM ポートから Docker コンテナー ポートへのポート マッピングが表示されます。ゲーム サーバーで使用されているポートを見るには?
この情報は docker ps に表示されます:0.0.0.0:30000->3600/tcpは、VM のポート 30000 が TCP のコンテナーの 3600 にマッピングされていることを示しています0.0.0.0:30001->3601/udpは、VM のポート 30001 が UDP のコンテナーの 3601 にマッピングされていることを示しています
Windows と Linux の両方で、Docker コンテナーは “playfab” Docker ネットワークの一部です。PlayFab ネットワークに関する情報を表示するには、
docker inspect network 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 の判別 を参照してください。この記事は、1 つ以上の DLL が不足しているためにゲーム サーバーが起動しない場合にも役立ちます。LocalMultiplayerAgent がクラッシュし、エラー メッセージなしで Docker コンテナーを再起動しています。ヘルプを!
クラッシュが発生すると、Container [ContainerId] exited with exit code 1 に類似した出力が表示されます。例:
- 有用なエラー メッセージがないか PF_ConsoleLogs.txt を確認します
- .zip アセット パッケージにゲームに必要なすべての DLL が含まれているか確認します。手順については、必要な DLL の判別 を参照してください。
- Windows イベント ログを確認して、Docker の失敗に関する有用な情報がないか確認します
