負荷試験メモ
JMeterについて
概要:
apache の提供する、負荷試験に使われるテストツール
Apacheソフトウェア財団にて開発されているソフトウェア。クライアントサーバシステムのパフォーマンス測定および負荷テストを行うJavaアプリケーション。HTTPレスポンスの内容の妥当性を判定することもできるため、パフォーマンステストのみならず、機能テストに使用することも可能。負荷生成 ("load generation") ツールに分類される
https://ja.wikipedia.org/wiki/JMeter
セットアップ
インストール
brew install jmeter
Running `brew update --auto-update`...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> New Formulae
opencl-icd-loader
You have 30 outdated formulae installed.
You can upgrade them with brew upgrade
or list them with brew outdated.
中略
🍺 /opt/homebrew/Cellar/jmeter/5.5: 2,752 files, 140.6MB
==> Running `brew cleanup jmeter`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> `brew cleanup` has not been run in the last 30 days, running now...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
テーマ変更:
[Options]>[LookAndFeel]>[Systemを選択]
シナリオの作成
ThreadGroup:
複数のテストをひとまとめにするためのグループ
テストの作成:
[ThreadGroupを右クリック]>
[Add]>[Sampler]>
[HttpRequest(上から二番目)をクリック]
↓
リクエストの送信先や種類を設定
↓
保存する (〜.jmxというファイル名になる)
テスト計画書を保存:
File→Save Test Plan as
項目の初期化:
Edit→Clearを押下
設定
サーバ名またはIP:サーバのエンドポイント or IPアドレスを指定する
パス:リクエスト送信先のリソースを指定する
Ramp-Up期間:全リクエストの作成時間
スレッド数で設定したリクエスト群を、何秒間で作成するかを決める
Ramp-Up期間を100(秒)、スレッド数を10とすると、
JMaterは100秒かけて10スレッド分のリクエストを送信しようとする
リクエストの作成時間であり、テストの実行時間ではない
負荷検証するサーバの処理速度がテストに追いつかない場合は、
この時間を大幅にオーバーしている
一定時間でテストを中断したい場合は、同画面のスケジューラにチェックを入れて、
終了時間を設定する
スレッド数とループ回数:
スレッド数は、リクエスト群を送信する回数
スレッドは「リクエスト」ではなくリクエスト群であること
1スレッドでは複数のリクエストを送信することができる
リクエスト群内のリクエスト数はどうやって設定するかというと、ループ回数で指定する
ループ回数は1スレッドで送信するリクエストの量を決める値
テスト実行時に送られる総リクエスト数は、このスレッド数とループ回数
の積によって決まる
総リクエスト数 = スレッド数 × ループ回数
項目の解説
ヘッダ | 意味 |
---|---|
Label | サンプラーの名称 |
#Samples | サンプル数 |
Average | 平均応答時間(ms) |
Median | 応答時間の中央値(ms) |
90% Line | 90%信頼区間(少なくとも90%はこの値に収まる。単位ms) |
95% Line | 95%信頼区間(少なくとも95%はこの値に収まる。単位ms) |
99% Line | 99%信頼区間(少なくとも99%はこの値に収まる。単位ms) |
Min | 最小応答時間(ms) |
Max | 最大応答時間(ms) |
Error% | エラーの割合(%) |
Throughput | スループット(1秒間に何件のリクエストに対し応答できたか) |
KB/sec | 1秒当たりの平均転送データ量(KB) |
テストの実行
jmeterコマンドでの実行
-n:CLIでの実行
-t :jmxファイルの内容を実行
-r:リモートサーバを使ってシナリオを実行
オプション解説記事:
ローカル環境での実行見本
jmeter -n -t test1_HTTP_Request.jmx
WARNING: package sun.awt.X11 not in java.desktop
Creating summariser <summary>
Created the tree successfully using test1_HTTP_Request.jmx
Starting standalone test @ 2022 Sep 21 16:33:37 JST (1663745617701)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary = 1 in 00:00:00 = 50.0/s Avg: 0 Min: 0 Max: 0 Err: 1 (100.00%)
Tidying up ... @ 2022 Sep 21 16:33:37 JST (1663745617756)
... end of run
負荷を都度変えれるように引数を設定してみた
k_tsuno@ABCM099 ~ % jmeter -n -t 〜〜〜.jmx -l result_10rps.jtl -Jthread=10 -Jrampup=1 -Jloop=1
WARNING: package sun.awt.X11 not in java.desktop
Creating summariser <summary>
Created the tree successfully using 〜〜〜.jmx
Starting standalone test @ 2022 Sep 23 21:37:08 JST (1663936628401)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary = 10 in 00:00:01 = 35.9/s Avg: 175 Min: 102 Max: 333 Err: 0 (0.00%)
Tidying up ... @ 2022 Sep 23 21:37:09 JST (1663936629559)
... end of run
引用資料:
JMeterのThread Properties設定
JMeterのThread Group設定
↓
限界まで負荷をかけ続けるのではなくて、
秒間リクエスト数(rps)を決め打ちして実行してみて、
サーバ側の負荷やその他の状態を監視したい時に活用する
# 60のスレッドを60秒の時間をかけて処理開始し、スレッド毎にシナリオを一回だけ実行する
スレッド数: 60
Ramp-Up期間(秒): 60
ループ回数: 1 (無限ループのチェックボックスはオフにしてください)
60のスレッドを60秒の時間をかけて処理開始し、スレッド毎にシナリオを一回だけ実行する
JMeter は平均的に処理開始のタイミングをばらして実行してくれるので、
毎秒1回ずつ処理が実行され、1rps の負荷をかけることができる
Delay Thread creation until needed
スレッド生成のタイミングの調整できるオプション
デフォルトの設定では、テストで必要となるスレッドをテスト実行時に生成する
大量スレッドの場合、実行時のスレッド生成で CPU を過剰に使う可能性あり
↓
設定を有効にして使用するタイミングでスレッド生成を行うように遅延
↓
CPU等のリソースを節約できる
引用資料:
パーセンタイルについて
測定した結果を並べて??%が合格になるラインの事
↓
不合格の??%を除外した中の最悪値
何らかの結果をソートしたときに、
結果として悪い方の100-n%個を異常値として無視したときに一番悪い結果のこと
下記のように1~10の何らかの結果が得られたとして、90%ile値を求める。
1,2,3,4,5,6,7,8,9,10
90%ile = 10%個が異常値として無視してよい
1~10の10個→10個の10%個→10*0.1=1個を無視してよい
数字が高いほど結果が悪いのだとすると、10を無視してよい
1~9のなかで一番悪い結果が90%ile値なので、
9がこの結果集合に対する90%ile値
引用資料:
GCPでの負荷試験 JMeter
基本のまとめ記事
負荷試験の見積もり
参考記事: