Webアプリケーションのパフォーマンス測定方法

1.目的
ServletやCGIなどのWebアプリケーションの、パフォーマンス測定をします。
Apache JMeterを使うと、
・ランダムな間隔や等間隔の、リクエスト発行が出来る。
・同時アクセス数を設定できる。
ということが出来ます。

2.用意するべきもの

1. Webアプリケーション
測定対象です。これが無いと始まりません。
2. Apache JMeter
Webアプリケーションのパフォーマンス測定ツールです。

3.起動前の準備
とりあえず適当なディレクトリに展開したら、
バッチファイルが壊れているので、それを直しましょう。
修正対象は、$JMETER_HOME/bin/jmeter.batです。

最終行のjavaを起動するところで、ヘンなところに改行が入っているので、そいつを除去します。
最終行が、↓のようになっていればOKです。

java -cp ..\lib\xerces.jar;ApacheJMeter.jar %HOST% %PORT% org.apache.jmeter.Driver %PROP%

4.JMeterを使う準備

JMeterを使う前に、Webアプリケーションを準備しましょう。
今回用意したのは、ごく簡単なCGIスクリプトとServletです。

Perl版 Hello World CGI

#!/usr/bin/perl

print "Content-Type: text/plain\n\n";
print "Hello, World!!";

C言語版 Hello World CGI

#include <stdio.h>

main()
{
 puts("Content-Type: text/plain\n");
 puts("Hello, World!!");
}

Hello World Servlet

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Hello extends HttpServlet
{
 public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws IOException, ServletException
 {
  response.setContentType("text/plain");

  Writer writer = response.getWriter();
  writer.write("Hello, World!!");
  writer.flush();
  writer.close();
 }
}

というわけで、起動の準備が完了したら使ってみましょう。
上で修正した、jmeter.batをダブルクリックでOKです。

こんなのが出ればOKです。
Apache JMeterの起動画面

5.パフォーマンスを測定する
まずURL欄に、対象WebアプリケーションのURLを入力します。
そして、Runタブをクリックし画面を切り替えたら、
Actionsのドロップダウンリストから、「Show the samples analysys as dot plots」を選びます。
あとは、Runメニューから、Startを選ぶだけです!

条件はデフォルトで、
・ガウス分布による、リクエスト発生(平均間隔 300ms, 偏差 100.0)
・同時アクセス数10
です。

C言語版 Hello World CGI
C言語版CGIのパフォーマンス

Perl版 Hello World CGI
Perl版CGIのパフォーマンス

Hello World Servlet
Servletのパフォーマンス

6.結果
C-CGI Perl-CGI Servlet
平均レスポンス時間(ms) 17 43 462

とまあ、ものすごい単純なアプリケーションにもかかわらず、
Cの方がPerlより速いというのが、顕著に表れています。
Servletはむちゃくちゃ遅いので、あんまり単純なアプリケーションを記述するのには、
向いていないと言えるでしょう。

7.その他
Setupタブの画面で、「Advanced HTTP Tester」を選べば、
POSTでパラメータを渡したり、HTTPの認証を使ったり、クッキーも使えたりします。
色々試してみましょう。

8.まとめ
このように、便利なツールを使って、簡単にパフォーマンスを測定できます。
Webアプリケーションのパフォーマンス改善などに役立てましょう。