Java: 複数クライアントでの自動Web(HTTP GET)レスポンス計測ツール

これは何?

  • 少数(1〜数台)のクライアント環境から多数のWebアクセスのエミュレート及びそのレスポンスを計測する際に活用するコード。
  • 指定のURLにGETリクエストを送出し、そのレスポンス(ボディ)データと処理時間(リクエスト送出からレスポンス受信まで)を算出。
    ※一般のブラウザのようにレスポンス取得からデータの描画までの処理時間は含まれない。
  • main()内でスレッドプール(Webクライアント数)とタスク(合計アクセス数)を生成。仮にクライアントが応答無しになった場合は、最大awaitTime秒待って強制終了する。
  • このツールを使用した際の評価の書き方としては「XクライアントからのY時間あたりZアクセス数が発生した時のAAA(サーバ負荷|クライアントのレスポンス時間[最大|平均|最小])」の用になる見込みだが、Yを計測するコードは入れていない。。。(若干わかりにくいので、もっと簡潔な表現に落とす必要があるかも)
  • URLの指定はコマンドラインパラメータからできるように修正した方が良かったが、時間の関係で割愛している。(URLの修正にいちいち再コンパイルは手間ではある)

使い方は?

  • 下記のソースをJavaでコンパイルし、java Mainコマンドで実行する。(Eclipseがあればそれを使用すると手間が省ける)
  • アクセスURLとパラメータには気をつけること(外部サイトを指定してDOS攻撃に間違えられないように、自分のサーバか、localサーバなどを使用すること)
  • 現状実行結果を標準出力している。スレッドセーフな整形ログ出力を追加で書き込むのも良いし、標準出力内容を簡易的にして、プログラムの実行結果をファイルにリダイレクトするのも良い。

ソースコード

Main.java

NetHttpClient.java

実行結果 (イメージ)

参考サイト