FAT47の底辺インフラ議事録

学んだことのメモ帳です

JMeterによる負荷試験 その1 導入から実行まで

JMeterとは
Apache JmeterJakarta Projectにおいて開発されているソフトウェア。
クライアントサーバシステムのパフォーマンス測定/負荷試験を行えるツールです。
オープンソースで開発されているので、無償で利用することができます。
WebアプリケーションとWebサーバの性能測定に利用されています。
Javaで書かれているのでWindowsLinuxでも環境依存せずに利用できます。
負荷をかけるだけではなくレスポンスの確認もできるので、"ある一定の負荷をかけた場合に、応答を正確に返せるか"といった検証が可能です。

JMeterの動作
インストールから簡単なテストシナリオの作成、結果の見方までを紹介します。
私は手元にあるWindowsマシンのJMeterでテストシナリオを作成し、それをlinuxサーバで実行するという方法を行っています。

以下にLinuxでのインストール方法を記載します。

インストール
Javaで書かれているのでJ2SDK1.4以上が必要です、
JDKを以下のサイトから入手してきましょう。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

実行権の付与

chmod +x /home/work/jdk-6u27-linux-x64-rpm.bin

実行

./jdk-6u27-linux-x64-rpm.bin

環境変数JAVA_HOME設定

export JAVA_HOME=/usr/java/default

確認

java -version
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)

JMeterの入手
以下のサイトから最新版をダウンロードしてきましょう。
http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi

展開と設置

tar zxvf jakarta-jmeter-2.5.tgz
mv jakarta-jmeter-2.5 /usr/local/
ln -s /usr/local/jakarta-jmeter-2.5 /usr/local/jmeter

これだけでOKです。
Windowsでのインストールもほとんど同じ流れです。
JDKをインストールし、jmeterを展開、フォルダに設置するだけです。
起動するときは、bin\jmeter.batを実行します。


テストシナリオの作成
(Windows)
bin\jmeter.batを起動させると以下のような画面が表示されます。

この画面からテストシナリオを作成していきます。
まずは、「あるページに、1人の人が訪れる」というテストシナリオを作成したいと思います。

「テスト計画」を右クリックして、「追加」→「Threads(Users)」→「スレッドグループ」を選択します。
これでスレッドグループが追加されました、

追加したスレッドグループをクリックすると、スレッドプロパティ画面が右側に表示されます。


スレッド数のところに「1」を入力します。
このスレッド数は想定するユーザ数に値します。

次にHTTPリクエストの設定を行います。

「スレッドグループ」を右クリックして、「追加」→「設定エレメント」→「HTTPリクエスト初期値設定」を選択します。
[サーバ名またはIP]のところにテストするサーバのIPアドレスを入力します。

HTTPリクエスト処理を行う為にサンプラーを追加します。
「スレッドグループ」を右クリック「追加」→「サンプラー」→「HTTPリクエスト」を選択します。
[パス]にリクエストを送るページ名(プログラム名)を指定します。
サーバ名とIPアドレスは先ほどの初期設定の値が利用されるので、空欄で大丈夫です。

今回はindex.phpにリクエストを送ります。

テストした結果を保存するリスナーを設定します。
「スレッドグループ」を右クリック→「追加」→「リスナー」→「統計レポート」を選択します。


結果をファイルに保存したい場合はファイル名を入力しましょう。

項目名 意味
Samples サンプル数(実行回数)
Average サンプルの合計の平均値
Median サンプルの中央値
90% Line サンプルの90%はこの値よりも低くなる値
Min 最小値
Max 最大値
Error サンプル内の何%がエラーになったか(今回はアサーション設定してないので関係なし)
Throughput 単位あたりの処理数
KB/Sec 秒間に何KB処理したか

↑間違っていたら教えてください。

テストファイルの保存
「ファイル」→「テスト計画を名前をつけて保存」を選択しjmxファイルを保存してください。

テスト実行
先ほど作成したjmxファイルをJMeterを入れたLinuxに転送してください。

cd /usr/local/jmeter/bin
chmod +x jmeter
./jmeter -n -t /tmp/test.jmx

-n オプションはNON-GUIモードでJMeterを実行するオプションです。
-t オプションで実行するjmxファイルを指定できます。

これでJMeterの実行が可能です。
今回は"一人のユーザがindex.phpに一回アクセスする"というだけなので、すぐに実行は終わると思います。

これで一番簡単なテストは完了しました。

次にアサーションの設定をしてみましょう。
アサーションとは、テストしているサーバからの応答を検査し、その応答が正しいものかどうかをチェックするためのものです。
例えば先ほどのindex.phpは、「ようこそ!」と表示するプログラムだったとします。
アサーションを設定しなかった場合、ちゃんと「ようこそ!」が表示されていたかどうかを確認する術はありません。
もしかしたら、ある一定の負荷を超えると、503エラーが帰っていたかもしれません。

ちゃんと「ようこそ!」が表示されているかを確認する為にアサーションを追加します。
「スレッドグループ」→「追加」→「アサーション」→「アサーション

テストパターンの部分に検査したい文字列を入力しましょう。
今回は「ようこそ!」が帰っているかを確認するので、そのように入力してください。

リスナーも追加しておきましょう。
「スレッドグループ」→「追加」→「リスナー」→「アサーション結果」

アサーション結果を使えば、サーバからの応答の内容まで確認できるので便利です。


とりあえず今日はここまで。