パフォーマンスモニタでPhoton Serverの状態を監視する

要件
--------------------------------

- Windows
- Photon Server SDK 4.0.29.11263


前提知識
--------------------------------

### パフォーマンスモニタについて

- パフォーマンスモニタ自体はWindows上のツールの一つ
- .NET Frameworkでカスタム設定を追加できる
- Photonではパフォーマンスモニタに対して各種情報を出力できるようになっている


Photon Controlを起動する
--------------------------------

Photon Controlが起動していない場合は起動する。

※サービスとしてバックグラウンドで起動している場合など、
Photon Control自体は起動していないことがある


カウンターをインストールする
--------------------------------

Photonコントロールの右クリックメニューからPerfMon Counters、
Install Countersを選択し、パフォーマンスモニタにPhoton用のカウンターをインストールする


パフォーマンスモニタを起動する
--------------------------------

Photonコントロールの右クリックメニューからPerfMon Counters、
Start PerfMonを選択すると、パフォーマンスモニタが起動する。

デフォルトではCPU使用率しか表示されていない。

![2016-08-15_161522.png](https://qiita-image-store.s3.amazonaws.com/0/135033/1149451d-6549-d46a-87b6-fe91984117d1.png)


パフォーマンスモニタ上でPhoton監視用の項目を確認する
--------------------------------

画面上の緑色の＋ボタンを押すと、カウンターの追加画面が表示される。
Install Countersを行うと、ここにPhotonのカウンタが追加される。
アルファベット順になっているのでスライダーでPの辺りを探す。

- Photon Socket Server
- Photon Socket Server: CLR
- Photon Socket Server: ENet
- Photon Socket Server: HTTP
- Photon Socket Server: MUX Inbound
- Photon Socket Server: MUX Outbound
- Photon Socket Server: Policy file
- Photon Socket Server: Reliable HTTP
- Photon Socket Server: S2S
- Photon Socket Server: TCP
- Photon Socket Server: Threads and Queues
- Photon Socket Server: UDP
- Photon: Custom Queue Counters

それぞれのリストを展開すると、項目に合わせた細かい単位のカウンターが表示される。
例えばPhoton Socket Server: UDPを選択すると次のように表示される。

![2016-08-15_162537.png](https://qiita-image-store.s3.amazonaws.com/0/135033/c00efb57-9dc8-34e3-4323-bf0ee61826d2.png)

- UDP: Bytes in - *サーバが受信したデータ量(byte)*
- UDP: Bytes in/sec - *１秒間にサーバに受信したデータ量(byte)*
- UDP: Bytes out - *サーバが送信したデータ量(byte)*
- UDP: Bytes out/sec - *１秒間にサーバが送信したデータ量(byte)*
- etc...

こんな感じで項目に合わせて様々なPhotonサーバの状態を監視できる。


パフォーマンスモニタにPhoton監視用の項目を追加する
--------------------------------

例えばRUDPでサーバに接続しているユーザを可視化したい場合は、
Photon Socket Server: UDPの`UDP: Peers`カウンタを追加する。

追加する場合は、追加したいカウンタを選択してインスタンスを選択。
(インスタンスは起動しているPhotonアプリケーションのこと)
※今回はデフォルトのLoadBalancingを起動している状態なので、
_Total、<すべてのインスタンス>、LoadBalancingが表示されている。

ひとまずここは_Totalを選択し、追加ボタンを押下。
すると右の追加されたカウンターに、新しく項目が追加される。

![2016-08-15_163539.png](https://qiita-image-store.s3.amazonaws.com/0/135033/f3d3ea7f-f5a2-bf7e-e0e3-97d7145d0ff0.png)

今回は次のように設定した。

- UDP: Peers
- UDP: Messages in/sec
- UDP: Message out/sec

![2016-08-15_164451.png](https://qiita-image-store.s3.amazonaws.com/0/135033/e5cb93a8-21c2-a66d-1fa0-61e82e6ce5ae.png)


Photonサーバに負荷をかけてみる
--------------------------------

ゲームサーバ上に5人入れるルームを10個作り、
それぞれのユーザが１秒間に100byteのデータを送信する状態にした結果が以下。

![2016-08-15_164034.png](https://qiita-image-store.s3.amazonaws.com/0/135033/a806d744-b923-1d48-a40f-3c4af452861c.png)

このグラフから、

- Peer(ユーザ)が次第に増えていき、50人程度のユーザがゲームをプレイしている
- それぞれのユーザは１秒間に大体１つメッセージを送信している
- サーバの送信メッセージ数がグラフ上でぶっとんでいる

ことが分かる。


グラフを調整する
--------------------------------

このグラフではサーバの送信データ数、バイト数等の情報が見づらいのでグラフを調整する。
グラフ上で右クリックメニューからプロパティを開く。

それぞれカウンタの線の色や太さ、スタイルを変更できるので、見やすいスタイルに変更する。
また、グラフが突き抜けてしまっていたので
「グラフ」タブの垂直スケール最大を1000に変更する。

グラフタブの最大値を1000にしたことから、
CPU使用率の表示が1/10になってしまうので、スケールを10.0に変更する。

再度同じ負荷をかけてみる。

![2016-08-15_170345.png](https://qiita-image-store.s3.amazonaws.com/0/135033/f23bfc7d-2557-f07c-bf5f-024ae953c917.png)

スケールが変わったことで突き抜けてしまっていた情報の最大値が見れるようになった。
グラフの垂直スケールが1000になっているが、CPU使用率は10倍にしているので
画面上からおおよそ百分率でみれるようになっている。

改めてグラフの内容を確認すると、

- Peer(ユーザ)が次第に増えていき、50人程度のユーザがゲームをプレイしている
- それぞれのユーザは１秒間におおよそ１つのメッセージを送信している
- それぞれのユーザは１秒間におおよそ４つのメッセージ受信している

ことが分かる。