Windows SDK ツール: TcpAnalyzer のご紹介


~~~TCP通信のボトルネックを調査する~~~

こんにちは、ソケット通信、デジタル署名、証明書、暗号化プログラミングのサポートをさせていただいている小泉です。 

普段、TCP通信のアプリケーション開発や、トラブルシューティングをされているみなさまは、自身の構築したシステムのパフォーマンス チェックはどのようにされておりますでしょうか。パフォーマンス チェックというと高価な解析ツールが必要なイメージがあり、開発の初期段階、特にプロトタイプ開発では、おざなりにされてしまいがちですよね。今回はそんな時に簡単便利な Windows SDK ツールに付属の TcpAnalyzer のご紹介をさせていただきます。 

TcpAnalyzer  は、TCP の接続単位で送信側アプリケーション、受信側アプリケーション、ネットワークのいずれにパフォーマンス のボトルネックがあるかを判断できる便利な無償ツールでございます。これもまた無償ツールである 「Microsoft Network Monitor」と組み合わせることにより、どのようなデータを送受信した際にボトルネックが発生したかが具体的に確認できますので、併せてご利用ください。
「Microsoft Network Monitor」 については、下記をご参照願います。
ご存じですか、Microsoft Network Monitor はコマンドラインでも操作できます

 1.     TcpAnalyzer でできること
TcpAnalyzer は TCP の接続単位で下記の値をチェックすることができます。
つまりソケット単位やコネクション単位でのパフォーマンスのチェックが可能です。 

  • 接続の状態(LISTEN,ESTABLISH,CLOSE_WAITE 等)
  • RTO(再転送タイムアウト)値
  • 1秒間あたりの平均送信データ量
  • Duplicate ACK の送受信数
  • 未送信データ量
  • 送信データのうち、通信相手から ACK が返されていないデータ量
  • 受信データのうち、アプリケーションが未取得となっているデータ量
  • 再転送率

 2.     TcpAnalyzer の利用方法
TcpAnalyzer の起動から、データの収集、ログの保存までの一連の手順を下記にご紹介させていただきます。
操作自体は非常にシンプルですので、是非お試しください。

①      TcpAnalyzerを起動します。
「C:\Program Files」 に Windows SDK をインストールした場合、 「C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin」 に TcpAnalyzer.exe  がありますので、ダブルクリックで起動します。
なお、 “v7.1”  等のバージョン番号についてはインストールしたWindows SDK のバージョン番号により代わりますので、ご注意ください。
Windows SDKの入手方法については下記をご参照願います。
入手可能な Windows SDK について

②      TcpAnalyzer.exe が起動すると以下のように接続単位でローカルIPアドレス、ローカルポート、リモートIPアドレス、リモートポート、接続を開いたプロセスのID、接続の状態が表示されます。
この画面にて、現在、どのような接続がPC上に存在するかがリアルタイムでわかります。この中から ESTABLISHED 状態の接続のうち、パフォーマンスをチェックしたい接続を選択します。

③     パフォーマンスをチェックしたい接続を選択したら、画面左下の [Enable EStats Collection] ボタンを押します。そうすると以下の画面が表示されますので、各値をモニタリングし、ボトルネックが疑われる異常な数値が記録されていないかを確認します。

なお、一番上のグラフは過去2分間の送信データのスループット、二番目の円グラフは総接続時間のうち、送信待ち時間、受信待ち時間等の占める割合を示します。一般的には、正常時と異常時の「Performance Statistics」、「Data Statistics」の各項目を比較することにより、ボトルネックの箇所を推測することが可能です。

④     必要に応じて[Log Data to File]ボタンでパフォーマンスデータをログファイルに保存します

なお、ここで保存したログファイルは、② の画面で 「Load a Log File」 ボタンにて再度 TcpAnalyzer に読込ませ、ログした内容を再生することも可能です。

今回ご紹介した TcpAnalyzer は如何でしたでしょうか。
TcpAnalyzer はユーザインターフェースこそ古いものの、無償配布のツールとしては非常に良くできたツールですので、自分の作成したプログラムやシステムに TCP 通信上のボトルネックが疑われる場合は、調査に是非ご活用いただけたらと存じます。
次回の私の投稿では、各項目がどのような意味を持つのかについて、もう少し詳しくご説明させていただく予定です。