ApacheBenchは実行時に単一のURLしか指定できないため、実態に沿ったパフォーマンスを知るには工夫が必要でした。そこで、複数のURLに対して接続が可能で、各URLに対して同時接続数などのパラメータを個別に設定できるベンチマークソフト「JMeter」を取り上げます。JMeterは、Apache Software Foundationで開発されているJavaアプリケーションです。きめ細かい評価を行うにはそれ相応に詳細な設定を行う必要があるため、ApacheBenchほど手軽ではありません。ただし、GUIで操作でき、Webブラウザの巡回記録から定義ファイル(注)を作成することもできるため、動作させることは難しくありません。
注:複雑なベンチマークでは、テストの内容を定義したファイルの作成が重要になります。時間軸に沿って動作記述することから、シナリオファイルと呼ばれることもあります。
JMeterの動作にはJDK 1.4.2以上が必要です。Fedora Coreにインストールされている互換JDKやJREで動作しない場合は、Sun Microsystems純正JREを利用します。実行に当たってjavaにパスが通っていることを確認しましょう。
$ which java /usr/bin/java
また、GUIで操作するため、X Window Systemも必要です。
JMeterは、以下のURLからダウンロードできます。
JMeter Downloads
http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
ここではjakarta-jmeter-2.1rc1.tgzを利用します。安定版の2.0.1はJDK 1.5.0では動作しません(JDK 1.4.2では動作可)。ダウンロードしたアーカイブを展開し、生成されたディレクトリへ移動したらJMeterを起動します。
$ tar xvfz jakarta-jmeter-2.1rc1.tgz $ cd jakarta-jmeter-2.1rc1/bin/ $ ./jmeter
文字化けを起こす場合は環境変数LANGを「C」にします。
$ export LANG=C (bash系) $ setenv LANG C (csh系)
JDKをあらためてインストールする場合は、ディストリビューション標準のJDKを事前に削除しておきます。そして、以下のURLからプラットフォームに合ったJDKをダウンロードします。
Java 2 Platform Standard Edition 5.0 のダウンロード
http://java.sun.com/j2se/1.5.0/ja/download.html
Linux用は「Linux RPM in self-extracting file」(RPM版)と「Linux self-extracting file」(非RPM版)が用意されています。ダウンロードしたファイルはシェルスクリプトです。
# sh jdk-1_5_0_04-linux-i586-rpm.bin
# sh jdk-1_5_0_04-linux-i586.bin # mv jdk1.5.0_04 /usr/local/
RPM版のインストール先は「/usr/java/jdk1.5.0_04/」です。非RPM版はカレントディレクトリにjdk1.5.0_04が展開されるので、適宜/usr/localなどに移動します。
各ユーザーのコマンドパスに「/usr/java/jdk1.5.0_04/bin」(非RPM版は「/usr/local/jdk1.5.0_04/bin」)を追加します。
$ export PATH="$PATH:/usr/java/jdk1.5.0_04/bin"(bash系) $ setenv PATH $PATH":/usr/java/jdk1.5.0_04/bin"(csh系)
$ which java
を実行して、設定したjavaにパスが通っていることを確認します。
起動できたら、JMeterで評価試験を行ってみましょう。
1.テスト計画を作る
JMeterの「テスト計画」は、ベンチマークのシナリオファイルそのものです。評価対象となるWebシステムのコンテンツを複数指定して実行スケジュールを指定するなど、複雑な処理も可能です。リクエストにクッキーやセッションなどを織り込むなど、要件定義で想定している接続実態により近いテストも再現できます。
細かい設定ができる半面、シナリオの作成は大変です。そこでJMeterのHTTPプロキシ機能を利用し、Webブラウザの閲覧記録をそのままシナリオファイルに記録させるようにします。
2.スレッドグループの作成、設定
まず「テスト計画」の中にスレッドグループを作成します。「テスト計画」を右クリックし、[追加]−[スレッドグループ]を選択します。画面1のように、「テスト計画」の下に「スレッドグループ」が追加されます。
次に、スレッドグループをクリックして[スレッド数]と[ループ回数]を設定します。ここではそれぞれ「10」「100」としています。この値はApacheBenchと同様、同時アクセス数と連続アクセス数になります。テスト内容に合わせ、通常値から極限値まで試行錯誤を繰り返しながら設定します。
3.HTTPプロキシサーバの作成
WebブラウザからのHTTPリクエストどおりのシナリオを作成するため、JMeter内部にHTTPプロキシを立ち上げてWebブラウザのリクエストを自動的に検出して記録させます。「ワークベンチ」を右クリックし、[追加]−[Non-Testエレメント]−[HTTPプロキシサーバ]を選択します。記録の開始と終了は、それぞれ[開始][停止]ボタンをクリックします。
必要に応じて「挿入するパターン」「除外するパターン」を設定し、記録の対象とするURLを絞り込むこともできます。画面2では、例として末尾が「.gif」「.jpg」となっているURLは記録の対象外としています。
4.Webブラウザのプロキシ設定、評価対象URLの参照
Webブラウザの設定を変更し、JMeter内部のHTTPプロキシサーバを参照するようにします。設定を変更したら、評価対象となるコンテンツをWebブラウザで閲覧します。閲覧したURLがJMeterの「スレッドグループ」下に追加され、シナリオが自動的に生成されます。
URLにミスがあったり余分なページを閲覧してしまった場合は、手動で修正や削除が可能です。Webブラウザによる巡回が終わったら、JMeterの「HTTPプロキシサーバ」で[停止]ボタンをクリックして記録を終了します。
5.テスト計画の編集
自動的に追加された「スレッドグループ」下の「HTTPリクエスト」に余分なものがある場合は、そのリクエストを右クリックして[削除]を選択します。リクエストをクリックすれば、URLの修正などが行えます。CGIなどの動的コンテンツで、サーバに渡すパラメータがある場合はここで指定を行います。
6.リスナーの追加
「リスナー」を使用し、評価結果を表示させます。「スレッドグループ」を右クリックし、[追加]−[リスナー]から[グラフ表示]や[統計レポート]を選択して追加します。リスナーはスレッド単位だけではなく、リクエスト単位でも作成できます。各リクエストアイコンを右クリックし、同じ要領でリスナーを追加します。全体の評価とは別に、個別リクエストだけのレポートを見たい場合に使用します。
7.テスト計画の保存
テスト実行に先立ち、作成したテスト計画を保存します。メニューの[ファイル]−[テスト計画を保存]で任意のディレクトリに保存します。
8.テストの実行
メニューの[実行]−[開始]で、作成したシナリオにのっとったテストが行われます。性能テスト、負荷テスト、破壊テストを行うには、「スレッドグループ」をクリックし、[スレッド数]と[ループ回数]の値を調整して再測定を行います。その際、前テストの結果をクリアしておきます。結果のクリアを実行するには、メニューの[実行]−[全て消去]を選択します。
リスナーとして追加した「グラフ表示」や「統計レポート」では、上の画面のような結果が表示されます。値の見方や対処法はApacheBenchで紹介したものを参考にしてください。
作成済みのテスト計画があるならば、JMeterをコンソールから実行することも可能です。jmeterスクリプト実行時に、コンソール上で動作させる「-n」オプションとテスト計画ファイルを指定する「-t」を追加します。
$ ./jmeter -n -t テスト計画ファイル
JMeterは商用ソフトに匹敵する機能を備えており、Webベンチだけでなく、FTPやJDBCの測定にも用いることができます。
The Jakarta Project「Apache JMeter」
http://jakarta.apache.org/jmeter/
日本語訳(JMeter1.8.1ベース)
http://cgi0.biwa.ne.jp/~yabuta/study/jmeter/
次回はhttpd.confでできるチューニング方法を解説します。
Copyright © ITmedia, Inc. All Rights Reserved.