次の方法で共有


デバッグ ゲーム サーバーへの直接接続

PlayFab マルチプレイヤー サーバーのトラブルシューティングについては、まず LocalMultiplayerAgent から開始する必要がありますが、直接接続が必要となる状況もあります。 次に例を示します。

  • 環境の違い: ゲーム サーバーの動作が、ローカル環境とライブ サービスとの間で異なっている可能性があります。
  • サーバーの正常性: サーバーに異常としてフラグが設定されているかどうかを調査するには、直接接続が必要となる状況もあります。
  • プロファイラー/デバッガーを直接接続する: 直接接続を介してコードをプロファイリングする方が簡単な可能性があります。
  • リアルタイム ログ分析:「マルチプレイヤー サーバー ログのアーカイブと取得」の手順に従えば、サーバーがシャットダウンしたときにログを取得できるようになります。 リアルタイム ログを表示するために、直接接続を行いたい場合があるかもしれません。

ゲーム サーバー (Windows または Linux) をホストしている VM に接続するには、playfab.com Web アプリケーションの [接続] ボタンを使用してリモート デスクトップ (RDP)/SSH 資格情報を取得できます。 このボタンは、マルチプレイヤー ビルドの [仮想マシン] ページで確認できます。 CreateRemoteUser API 呼び出しから資格情報を取得することもできます。

VM に接続するとすぐに、オペレーティング システムのコンソールを使用してゲーム サーバーを監視できます。 MPS サービスでは、Docker コンテナーを使用してゲーム サーバー プロセスを起動します。 Docker CLI コマンドを実行するには、Windows では管理者 PowerShell を使用し、Linux では sudo su - を使用する必要があります。

Important

これらは、Docker コンテナーの高度なデバッグ手順です。 これらの手順を使用すると、ゲーム サーバーが壊れる可能性があります。 運用ゲーム サーバーを実行しているコンテナーでは、これらのコマンドを使用しないことをお勧めします。

コンテナーのデバッグ中に表示される動作や情報に依存しないことを強くお勧めします。 サポートされている API と動作は、公開されているもののみです。その他の変更は、予告なく変更される可能性があります。

Windows と Linux の両方の手順

Docker コンテナーの使用を開始するにはどうすればよいですか?

Linux または Windows のどちらで開発している場合でも、Docker コンテナーの基本について理解する必要があります。

Docker の「はじめに」ガイドは、こちら (外部リンク) でご確認いただけます。 Windows コンテナーの詳細については、「windows とコンテナー」を参照してください。

VM に RDP/SSH 接続したら、Docker コンテナーで実行されている実行中のゲーム サーバーの一覧を表示するにはどうすればよいですか?

docker ps を使用します。 コンテナー名とハッシュ、および VM ポートから Docker コンテナー ポートへのポート マッピングが表示されます。

ゲーム サーバーで使用されているポートを確認するにはどうすればよいですか?

この情報は、docker ps に記載されています:

980d7e80457265230a0bf   "/bin/sh -c ./cppLin…"   About a minute ago   Up About a minute   0.0.0.0:30000->3600/tcp, 0.0.0.0:30001->3601/udp  great_archimedes
  • 0.0.0.0:30000->3600/tcp は、VM 上のポート 30000 が TCP のコンテナーの 3600 にマップされていることを示しています
  • 0.0.0.0:30001->3601/udp は、VM 上のポート 30001 が UDP のコンテナーの 3601 にマップされていることを示しています

詳細については、「Docker ネットワーク」を参照してください。

注意

Windows と Linux の両方で、Docker コンテナーは "playfab" Docker ネットワークの一部です。 docker 検査ネットワーク 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 であることをご確認ください。このプロセスが停止すると、コンテナは消滅します)
  • リアルタイム プロセス情報の上位

TCP パケットと UDP パケットを監視するにはどうすればよいですか?

  • TCPdump (外部リンク) ユーティリティなどのツールの使用を検討してください。
  • apt update && apt install tcpdump を実行してインストールします。 特定のポートに使用するには、TCP の場合は tcpdump port 7777 を実行し、UDP の場合は tcpdump udp port 7778 を実行します。

tcpdump は、VM 内とコンテナー内の両方から使用できます。 ただし、VM ポートとコンテナー ポートの間にポート マッピングがあるため、正しいポート値を監視するようにしてください。

Windows 固有の手順

アセットのパッケージに含める必要がある DLL を特定するには、どうすれば良いですか?

手順については、「必要な DLL を決定する」を参照してください。 この記事は、1 つ以上の DLL が不足しているためにゲーム サーバーを起動できない場合にも役立ちます。

LocalMultiplayerAgent がクラッシュし、エラー メッセージなしで Docker コンテナーを再起動しています。 助けて!

クラッシュが発生すると、Container [ContainerId] exited with exit code 1 のような出力が表示されます。 次に例を示します。

info: PlayfabMultiplayerAgent[0]
      Waiting for heartbeats from the game server.....
info: PlayfabMultiplayerAgent[0]
      Container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8 exited with exit code 1.
info: PlayfabMultiplayerAgent[0]
      Collecting logs for container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8.
info: PlayfabMultiplayerAgent[0]
      Copying log file C:\ProgramData\Docker\containers\4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8\4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8-json.log for container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8 to D:\playfab\PlayFabVmAgentOutput\2020-09-29T01-42-01\GameLogs\032e7357-1956-4a60-9682-ca462cc3ea12\PF_ConsoleLogs.txt.
info: PlayfabMultiplayerAgent[0]
      Deleting container 4179fa451214251a45d1a8e8338203a9ff05dc6ec1231c50e1f81f5508b3e1c8.

デバッグ手順

  • 役に立つエラー メッセージがないかPF_ConsoleLogs.txt を確認する
  • .zip アセット パッケージに、ゲームに必要なすべての DLL が含まれているかどうかを確認します。 手順については、「必要な DLL を決定する」を参照してください。
  • Windows イベント ログを調べて、Docker エラーに関する有用な情報があるかどうかを確認します

LocalMultiplayerAgent でハートビートを取得しません

以前の試行で残ったコンテナーが存在する可能性があります。 docker ps -a を使用してすべてのコンテナーを確認し、docker rm -f <containerNameOrTag> を使用してそれらを削除できます。

Windows 上で、TCP パケットと UDP パケットを監視するにはどうすればよいですか?

Wireshark (外部リンク) ユーティリティなどのツールの使用を検討してください。

Visual Studio を使用して配置されたマルチプレイヤー サーバーをデバッグするにはどうすればよいですか?

手順については、「Visual Studio を使用してサーバーをデバッグする」を参照してください。

関連項目