はじめに
JMeterは一般的にWebシステムに一定のアクセス負荷をかける試験ツールです。
通常機能ではアクセス負荷量の上げ下げが困難ですが、外部ライブラリ(Throughput Shaping Timer)を組み込むことでグラフィカルかつ簡単に実現できたので紹介します。
Throughput Shaping Timer で実現できること
実際に負荷試験をする際に活用できるケースとして、以下のような例が当てはまると思います。
- 試験中に負荷量を定常量から急上昇(急降下)させてシステムの安定性を確認したい
- アクセス量に波があるシステムの試験をしたい
- スレッドグループ(アクセス導線)毎にきめ細やかな試験を同時に実施したい
アクセス負荷をどの程度制御できるのかについては、実際の設定交えて説明させていただきます。
Throughput Shaping Timer を使ってみる
環境情報
環境情報
- Mac(Catalina)
- Apache httpd server(2.4.x)
- Java8(Oracle java 8u202)
- JMeter(5.3)
環境構築
Apache httpd server
今回は簡易的な試験なので、Dockerでさくっと構築します。
試験対象のシステムがある方は構築不要です。
またNginxでもローカル環境構築でも、何でも大丈夫です!
- 公式イメージの取得
$ docker pull httpd
- コンテナ起動
$ docker run -dit --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
- コンテナID確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e2dc7c3714ee httpd:2.4 "httpd-foreground" 21 minutes ago Up 21 minutes 0.0.0.0:8080->80/tcp, 0.0.0.0:32768->8080/tcp my-apache-app
- コンテナ接続
$ docker exec -it e2dc7c3714ee /bin/bash
- テストページ作成
$ echo "hello" > ./htdocs/index.html
ここでapacheのドキュメントルートがMacのホームディレクトリになっている衝撃の事実が発覚。。。
Java
JMeterの実行にはJava8以上が必要です。
Javaのインストール方法は割愛します。
【初心者でもすぐわかる】JDKのインストール方法 Mac編
$ java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
JMeter
-
JMeterをダウンロードして任意のディレクトリに展開
ダウンロードページ
-
ThroughputShapingTimerをダウンロード
ダウンロードページ
※最新のバージョン2.5をダウンロード
-
ThroughputShapingTimerを配置
ダウンロードしたプラグイン(jpgc-tst-2.5.zip)を展開し、
中に含まれる以下3つのjarファイルをJmeterのlibディレクトリに配置する。
配置先:<JMeterを展開したディレクトリ>/apache-jmeter-5.3/lib
- jmeter-plugins-cmn-jmeter-0.5.jar
- ext/jmeter-plugins-manager-1.1.jar
- ext/jmeter-plugins-tst-2.5.jar
※3つとも階層構造を維持したまま配置すること
- JMeterを起動
$ cd /apache-jmeter-5.3/bin
$ sh ./jmeter.sh
※Windowsの場合は同一階層のjmeter.bat
をダブルクリックします
準備はここまでです、お待ちかねの実践編です!
負荷量を設定してみる(初級編)
状況設定
A君「このシステムは普段100tpsのアクセスがあるので、JMeterから10分間負荷をかけて試験します!」
上司「普段はその程度だけど、もしTwitterでバズってアクセス量が瞬間的に5倍になったらどうなる?」
A君「うーん、、、わからないです、、、(ならんやろ、、、)」
A君とJMeterの壮絶な性能試験がここから始まる!
※フィクションです
Jmeterを設定してみる
JMeterの基本的操作については割愛しています。
- 統計レポートを追加する
-
Add Row
をクリックして設定行を追加する ※行が時系列になります -
Start RPS
に開始時の負荷量を設定する ※RPS=RequestPerSecond -
End RPS
に終了時の負荷量を設定する -
Duration, sec
に継続時間を設定する
設定すると画面下部にリアルタイムでグラフが描写されるので、実際に試してみましょう!
実行結果を確認する
統計レポート
Apacheログ
- コンテナID確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e2dc7c3714ee httpd:2.4 "httpd-foreground" 7 hours ago Up 36 minutes 0.0.0.0:8080->80/tcp, 0.0.0.0:32771->8080/tcp my-apache-app
- Apacheログ解析
$ docker logs e2dc7c3714ee | grep test01 | awk '{print $4}' | sed 's/\[12\/Oct\///g' | uniq -c
1 2020:14:38:12
1 2020:14:39:09
3 2020:14:39:10
4 2020:14:39:11
6 2020:14:39:12
8 2020:14:39:13
11 2020:14:39:14
10 2020:14:39:15
9 2020:14:39:16
11 2020:14:39:17
10 2020:14:39:18
9 2020:14:39:19
11 2020:14:39:20
10 2020:14:39:21
9 2020:14:39:22
11 2020:14:39:23
10 2020:14:39:24
10 2020:14:39:25
10 2020:14:39:26
9 2020:14:39:27
11 2020:14:39:28
10 2020:14:39:29
10 2020:14:39:30
10 2020:14:39:31
10 2020:14:39:32
9 2020:14:39:33
11 2020:14:39:34
17 2020:14:39:35
26 2020:14:39:36
34 2020:14:39:37
42 2020:14:39:38
51 2020:14:39:39
41 2020:14:39:40
35 2020:14:39:41
26 2020:14:39:42
17 2020:14:39:43
10 2020:14:39:44
10 2020:14:39:45
10 2020:14:39:46
10 2020:14:39:47
10 2020:14:39:48
10 2020:14:39:49
9 2020:14:39:50
11 2020:14:39:51
10 2020:14:39:52
10 2020:14:39:53
10 2020:14:39:54
9 2020:14:39:55
10 2020:14:39:56
11 2020:14:39:57
10 2020:14:39:58
10 2020:14:39:59
10 2020:14:40:00
9 2020:14:40:01
11 2020:14:40:02
10 2020:14:40:03
10 2020:14:40:04
第一項目は秒間のアクセス量、第二項目は時間です。
だいたい10RPSをキープし、負荷量が一時的に50RPSまで上昇したことがわかりますね。
後日談
JMeterでアクセス負荷量を変幻自在に操ることに成功したA君
A君「Twitterでバズった時を想定したアクセス増加、JMeterで試験できそうです!」
上司「結果見せてもらったけど、単一ページへの試験しかできてないよね。ユーザがトップページから人気ページへ辿っていくケースを想定して試験欲しいんだけど。。。」
浮かれていたA君、しかし本当の戦いはこれからだった
次回:『もう何も怖くない』
さいごに
簡単な説明になりましたが、ThroughputShapingTimeの可能性を感じてもらえたかと思います。
しかしWebアプリケーションの試験ではサンプルページのみにアクセスするということは、まずありえません。
今回は簡単な使い方の紹介までとし、次回の記事で実践的な使い方を解説していきたいと思います。
続編はこちら
↓
JMeterでグラフィカルに変幻自在なアクセス負荷を設定する(後編)