> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ゲーム サーバーをデバッグするための直接接続

> RDP または SSH 経由で PlayFab マルチプレイヤー サーバー VM に直接接続し、ゲーム サーバーの健全性をデバッグしたり、プロファイラーをアタッチしたり、Windows および Linux でリアルタイム ログを表示します。

PlayFab Multiplayer Servers のトラブルシューティングでは、まず [LocalMultiplayerAgent](https://github.com/PlayFab/LocalMultiplayerAgent) から始めるべきですが、直接接続が必要な状況もあります。例:

* **環境の違い:** 場合によっては、ローカル環境とライブ サービスの間でゲーム サーバーの動作が異なることがあります。
* **サーバーの健全性:** サーバーが unhealthy とフラグ付けされている場合、それを調査するために直接接続する必要があるかもしれません。
* **プロファイラー/デバッガーの直接アタッチ:** 直接接続経由でコードをプロファイリングする方が簡単なことがあります。
* **リアルタイム ログ分析:** [マルチプレイヤー サーバー ログのアーカイブと取得](/services/playfab/multiplayer/servers/archiving-and-retrieving-multiplayer-server-logs) の手順に従うと、サーバーがシャットダウンしたときにログを取得できます。リアルタイム ログを表示するには、直接接続することを検討してください。

ゲーム サーバーをホストしている VM (Windows または Linux) に接続するには、playfab.com Web アプリケーションの "Connect" ボタンを使用してリモート デスクトップ (RDP)/SSH 資格情報を取得できます。このボタンは、Multiplayer Build の "Virtual Machines" ページで確認できます。[CreateRemoteUser](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-remote-user) API 呼び出しからも資格情報を取得できます。

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

<Info>
  これらは高度な Docker コンテナー デバッグの手順です。これらの手順を使用するとゲーム サーバーが壊れる可能性があります。運用中のゲーム サーバーを実行しているコンテナーでこれらのコマンドを使用することはお勧めしません。コンテナーをデバッグ中に表示される動作や情報に依存しないことを強くお勧めします。公式にドキュメント化された API と動作のみがサポートされ、その他は予告なく変更される可能性があります。
</Info>

## Windows と Linux 両方の手順

#### Docker コンテナーの始め方

Linux または Windows のどちらで開発していても、Docker コンテナーの基本を理解しておくべきです。

docker の "Get Started" ガイドを [こちら (外部リンク)](https://docs.docker.com/get-started/) で表示できます。Windows Containers の詳細については、[Windows and containers](https://learn.microsoft.com/en-us/virtualization/windowscontainers/about/) を参照してください。

#### 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 networking](https://docs.docker.com/network/) を参照してください。

<Note>
  Windows と Linux の両方で、Docker コンテナーは "playfab" Docker ネットワークの一部です。PlayFab ネットワークに関する情報を表示するには、`docker inspect network playfab` を使用してください。
</Note>

#### コンテナーの実行時の詳細を見るには?

docker ps を実行してコンテナー名を取得したら、**docker inspect \<ContainerName>** を実行できます。コンテナーの状態、ホスト VM のボリューム バインディング、ポート バインディング、コンテナーに渡された環境変数など、多くの情報が表示されます。

#### ゲーム サーバーのログを取得するには?

**docker logs \<nameOrHash>** コマンドを使用できます。これらのログには、アプリが標準出力/標準エラー ストリームに送信するすべての内容が含まれます。これらのログは既存のコンテナーにのみ存在することに注意してください。ゲーム サーバーがクラッシュした場合、VM 内の監視プロセスがコンテナーを削除し、新しいものを作成します。

ゲーム サーバーから内部でログするために GSDK を使用する方がベター プラクティスです。詳細については、[GSDK でのログ](/services/playfab/multiplayer/servers/integrating-game-servers-with-gsdk#logging-with-the-gsdk) と、終了したゲーム サーバーからログにアクセスするための [マルチプレイヤー サーバー ログのアーカイブと取得](/services/playfab/multiplayer/servers/archiving-and-retrieving-multiplayer-server-logs) を参照してください。

### 実行中のコンテナーの「内側」に接続して状況を確認できますか?

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 (外部リンク)](https://www.tcpdump.org/) ユーティリティのようなツールの使用を検討してください。
* インストールするには **apt update && apt install tcpdump** を実行します。特定のポートで使用するには、TCP には **tcpdump port 7777** を、UDP には **tcpdump udp port 7778** を実行します。

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

## Windows 固有の手順

#### アセット パッケージに含める必要のある DLL を判別するには?

手順については、[必要な DLL の判別](/services/playfab/multiplayer/servers/determining-required-dlls) を参照してください。この記事は、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 の判別](/services/playfab/multiplayer/servers/determining-required-dlls) を参照してください。
* Windows イベント ログを確認して、Docker の失敗に関する有用な情報がないか確認します

#### LocalMultiplayerAgent 上で、ハートビートを受信していません

以前の試行からの残っているコンテナーがあるかもしれません。**docker ps -a** で全コンテナーを見て、**docker rm -f \<containerNameOrTag>** でそれらを削除できます。

#### Windows で、TCP および UDP パケットを監視するには?

[Wireshark (外部リンク)](https://www.wireshark.org/) ユーティリティのようなツールの使用を検討してください。

#### Visual Studio を使用してデプロイされたマルチプレイヤー サーバーをデバッグするには?

手順については、[Visual Studio を使用したサーバーのデバッグ](/services/playfab/multiplayer/servers/allocating-game-servers-and-configuring-vs-debugging-tools#debugging-a-deployed-multiplayer-server) を参照してください

## 関連項目

* [ゲーム サーバーのローカル デバッグ](/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab)


## Related topics

- [LocalMultiplayerAgent でコンテナー ゲーム サーバーをデバッグする](/ja-jp/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-container-gameserver.md)
- [ゲームサーバーの割り当てと Visual Studio デバッガーの接続](/ja-jp/services/playfab/multiplayer/servers/allocating-game-servers-and-configuring-vs-debugging-tools.md)
- [ゲーム サーバーのローカル デバッグと PlayFab との統合](/ja-jp/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab.md)
- [LocalMultiplayerAgent を使用したプロセスベースのゲームサーバーのデバッグ](/ja-jp/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-process-based-gameserver.md)
- [Visual Studio でリモート Windows デバイス上の PC プロジェクトをデバッグする](/ja-jp/tools/tools-pc/visualstudio/gr-vs-debugging-with-visualstudio-remote-windows.md)
