Open6

負荷試験メモ

ktkt

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)

https://www.skyarch.net/blog/?p=12594

テストの実行

jmeterコマンドでの実行

-n:CLIでの実行
-t :jmxファイルの内容を実行
-r:リモートサーバを使ってシナリオを実行

オプション解説記事:
https://qiita.com/charon/items/4bcbd9d69e269d5e02b5

ローカル環境での実行見本

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

引用資料:
https://hitolog.blog/2021/10/19/jmeter/
https://tech-blog.rakus.co.jp/entry/2017/08/24/111332
https://qiita.com/sam_eng3336/items/30df8c08256da3b3e733

ktkt

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等のリソースを節約できる

引用資料:
https://keis-software.com/2013/09/02/jmeter-の利用方法1-ramp-up、スレッド数、ループ回数の誤/

https://blog.engineer-memo.com/2018/09/08/sql-server-のクエリ実行テストをする際に実行タイミング/

ktkt

パーセンタイルについて

測定した結果を並べて??%が合格になるラインの事

不合格の??%を除外した中の最悪値

何らかの結果をソートしたときに、
結果として悪い方の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値

引用資料:
http://blog.livedoor.jp/tallgeese7/archives/43114509.html