負荷テスト・パフォーマンス測定ツールのJMeterのインストールと簡単な使い方


#JMeterについて
[Apache JMeter](http://jmeter.apache.org/)は、負荷テストとパフォーマンスを測定するためのオープンソースのJavaアプリケーションです

JMeterを使うとサーバーに対して、秒間1万リクエストなどの負荷をかけ、その応答時間などの指標を見ることでのパフォーマンスを測ることができます

###なんでJMeterを使うの？
負荷テストツールには、[ab](http://httpd.apache.org/docs/2.2/programs/ab.html)(Apache Bench)や[httperf](https://github.com/httperf/httperf)のようなコマンドラインから使うシンプルなものもありますが、JMeterではブラウザ辿ったページを記録して、それに対して負荷テストをしたり、CSRFトークンなどの情報をリクエストを簡単に付与できたりと詳細な設定をして負荷テストを行いたい場合に使用します

#JMeterの導入

JMeterのインストールと基本的な使い方について紹介いたします

##JMeterをインストール

JMeterのバイナリファイルを[Apacheの公式サイト](http://jmeter.apache.org/download_jmeter.cgi)からダウンロードしてきて、解凍します

![スクリーンショット_2015-10-04_15_04_07.png](https://qiita-image-store.s3.amazonaws.com/0/18783/cf958fb4-7cab-3a64-fa3e-2f9874560ce0.png "スクリーンショット_2015-10-04_15_04_07.png")

ダウンロードしたファイルをアプリケーションフォルダに移動して、JMeterのjarファイルを起動します
*JMeterはJavaアプリケーションなので、必ずjavaをインストールしてください

```bash:Terminal
# アプリケーションフォルダに移動
$ mv ~/Downloads/apache-jmeter-2.13 /Applications

# JMeterを起動
$ java -jar /Applications/apache-jmeter-2.13/bin/ApacheJMeter.jar 
```

次のような画面が表示されれば、JMeterの起動に成功です
![スクリーンショット_2015-10-04_15_27_12.png](https://qiita-image-store.s3.amazonaws.com/0/18783/99e80ddb-3f69-7692-e019-9635305a6e61.png "スクリーンショット_2015-10-04_15_27_12.png")

##まず簡単な負荷テストをやってみる
JMeterを使ってレスポンスタイムの簡単な負荷テストを行ってみましょう

###スレッドグループの作製
テストを実行するためにはスレッドグループというのを作る必要があります
スレッドグループとは、あるページリクエストを投げるなどのテストの集合で、負荷テストの実行の１つの単位になります

それではスレッドグループを追加してみましょう　

サイドバーに表示されているテスト計画を右クリックすると色々な項目が出てきます
**テスト計画(右クリック)>追加>Threads(Users)>スレッドグループ**を選択することによってスレッドグループを追加します


![スクリーンショット_2015-10-04_15_46_40.png](https://qiita-image-store.s3.amazonaws.com/0/18783/fd672df9-0a8d-e58a-4e44-465a5c99db62.png "スクリーンショット_2015-10-04_15_46_40.png")

スレッドグループでは大きく分けて以下の３つの項目を設定することができる
・スレッド数
・Ramp-Up期間(秒)
・ループ回数
例えば、スレッド数を60, Ramp-Up期間を60、ループ回数を1とすると、 **「60のスレッドを60秒かけて処理を行い、スレッドごとに１回だけ実行する」** という意味になります
つまり、スレッドを立ち上げる間隔というのは等しく生成されるので、1分間に１秒に１回のリクエストが投げられるということです

![tg.png](https://qiita-image-store.s3.amazonaws.com/0/18783/9603b6d3-248a-7aa6-b8c0-ba5763b3405c.png "tg.png")

###HTTPリクエストの作製
スレッド内で実行するテストを作成します
**スレッドグループ(右クリック)>サンプラー>HTTPリクエスト**を選択することによってHTTPのリクエストを選択します

![スクリーンショット_2015-10-04_15_47_39.png](https://qiita-image-store.s3.amazonaws.com/0/18783/1f69eb9b-4d64-f177-f4f5-3bdec99b2091.png "スクリーンショット_2015-10-04_15_47_39.png")

HTTPリクエストでは、負荷テストを行うURLやHTTPメソッド、リクエストに含めるパラメータなどを設定することができます
ここでは、 **Webサーバ>サーバ名または IP**に接続先のホスト名を入力します

![スクリーンショット_2015-10-04_17_50_32.png](https://qiita-image-store.s3.amazonaws.com/0/18783/15d5f9e7-f2bf-6828-a512-c285860aea1c.png "スクリーンショット_2015-10-04_17_50_32.png")

###リスナーを追加
負荷テストを行った結果を確認するためにリスナーをスレッドグループに追加します
リスナーとは、負荷テストの結果を表示するためのもので、グラフであったりツリー形式であったり必要な情報となるようなるものを追加しましょう
ここでは、 **スレッドグループ(右クリック)>追加>リスナー>結果を表で表示**を選択し、表で結果を表示するようにします

![スクリーンショット_2015-10-04_15_47_50.png](https://qiita-image-store.s3.amazonaws.com/0/18783/4dce7021-e497-1d6f-dff7-626e32d14800.png "スクリーンショット_2015-10-04_15_47_50.png")

###負荷テストの実行
上のツールバーのボタンより、負荷テストを実行します
**第３者のWEBページに対して過度な負荷をかけて、サーバーを落としたりすると業務妨害などの罪に問われる可能性があるのでご注意ください**

![スクリーンショット_2015-10-04_18_05_31.png](https://qiita-image-store.s3.amazonaws.com/0/18783/5f45a782-9780-4260-2d58-0f77da6136fb.png "スクリーンショット_2015-10-04_18_05_31.png")

結果をみてみるとLatencyからリクエストを送ってサーバーが反応する時間レスポンスタイムを表し、SampleTimeではリクエストに対してデータをすべて取得するの要した時間を表しています

#まとめ
上記でJMeterのインストールと簡単な負荷テストを行いました
JMeterの良さというのは、認証のような様々なリクエストを投げたり、条件分岐など詳細な負荷テストをする時に本領を発揮します

本記事では触れていませんが、色々なコントローラを追加したりHTTP以外のサンプラーなど使ってみてください