はじめに
Apache JMeterはWebシステムのパフォーマンス測定および負荷テストを行うJavaアプリケーションで、GUI上でテスト計画を策定すれば簡単に大量のリクエストが送付可能です。
本記事では、自前で用意したWebサーバに対して負荷検証を行う際に同ツールを利用した流れについて記載しました。
環境情報
- Windows 10
- Cygwin
- apache-jmeter-5.4.1
インストールと設定
以下のリンクからZipを取得して展開すると
該当ディレクトリは以下のようになっています。
$ ls LICENSE NOTICE README.md apache-jmeter-5.4.1 bin docs extras lib licenses printable_docs
このbinの中にApacheJMeter.jar
が入っているのファイルエクスプローラーから起動するとGUIでJMeterが起動しました。
デフォルトでは「テスト計画」しか存在しないので、右クリックにて"追加>Thread(Users)>スレッドグループ"を選択することでThread情報を記載していきます。
入力するのは
- スレッド数 起動するスレッド数 ≒ セッション数
- Ramp-up期間 アクセス実行期間の指定(秒で指定)
- ループ回数 1つのシナリオ(スレッド)を何回繰り返すか ≒ 同時アクセス数
で、Thread数にはセッション数に該当する数値を入れてRamp-up期間には全体のアクセス実行期間を秒で入力します。
今回は以下のように値を入れてテストしました。
スレッド数 | 200 |
Ramp-up期間 | 200 |
ループ回数 | 3 |
最後にスレッドグループで右クリックをし、"追加>サンプラー>HTTPリクエスト"の「サーバ名またはIP」に該当するWebサーバの情報を入れてHTTPを指定した後にテスト計画を保存するとbinディレクトリに以下のようなファイルが生成されます。
$ cat HTTP\ リクエスト.jmx <?xml version="1.0" encoding="UTF-8"?> <jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1"> <hashTree> <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="テスト計画" enabled="true"> ...
負荷テストの実施
binディレクトリ配下にて以下コマンドを実行するとJMeterが起動し
$ ./jmeter-n.cmd HTTP\ リクエスト.jmx Creating summariser <summary> Created the tree successfully using ... Starting standalone test @ ... Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445 summary + 55 in 00:00:19 = 2.9/s Avg: 405 Min: 291 Max: 833 Err: 0 (0.00%) Active: 1 Started: 19 Finished: 18 summary + 90 in 00:00:30 = 3.0/s Avg: 398 Min: 291 Max: 631 Err: 0 (0.00%) Active: 1 Started: 49 Finished: 48 summary = 145 in 00:00:49 = 3.0/s Avg: 401 Min: 291 Max: 833 Err: 0 (0.00%) summary + 90 in 00:00:30 = 3.0/s Avg: 396 Min: 291 Max: 660 Err: 0 (0.00%) Active: 1 Started: 79 Finished: 78 summary = 235 in 00:01:19 = 3.0/s Avg: 399 Min: 291 Max: 833 Err: 0 (0.00%) summary + 90 in 00:00:30 = 3.0/s Avg: 394 Min: 287 Max: 614 Err: 0 (0.00%) Active: 1 Started: 109 Finished: 108 summary = 325 in 00:01:49 = 3.0/s Avg: 398 Min: 287 Max: 833 Err: 0 (0.00%) summary + 90 in 00:00:30 = 3.0/s Avg: 398 Min: 291 Max: 697 Err: 0 (0.00%) Active: 1 Started: 139 Finished: 138 summary = 415 in 00:02:19 = 3.0/s Avg: 398 Min: 287 Max: 833 Err: 0 (0.00%) summary + 90 in 00:00:30 = 3.0/s Avg: 397 Min: 290 Max: 626 Err: 0 (0.00%) Active: 1 Started: 169 Finished: 168 summary = 505 in 00:02:49 = 3.0/s Avg: 398 Min: 287 Max: 833 Err: 0 (0.00%) summary + 90 in 00:00:30 = 3.0/s Avg: 395 Min: 289 Max: 626 Err: 0 (0.00%) Active: 1 Started: 199 Finished: 198 summary = 595 in 00:03:19 = 3.0/s Avg: 397 Min: 287 Max: 833 Err: 0 (0.00%) summary + 5 in 00:00:02 = 3.1/s Avg: 361 Min: 294 Max: 624 Err: 0 (0.00%) Active: 0 Started: 200 Finished: 200 summary = 600 in 00:03:20 = 3.0/s Avg: 397 Min: 287 Max: 833 Err: 0 (0.00%) Tidying up ... @ ... ... end of run
Webサーバには以下のような形式でログが残り
[...] ..."GET / HTTP/1.1" 200 612 "-" "Apache-HttpClient/4.5.12 (Java/1.8.0_241)" "..."
確かに200Threadが3回繰り返されたアクセスログがあることが確認でき、accessが200秒の間で送りきられていました。
# cat access.log | grep Apache | wc 600 10200 120285
終わりに
今回は単純なリクエストでしたが、設定でベーシック認証への対応も可能なようです。
また、テスト実施後のログは以下のファイルに格納されているので詳細な分析もできます。
-rwx------+ 1 ... 'HTTP リクエスト.jtl' -rwx------+ 1 ... 'HTTP リクエスト.log'
以上、ご参考になれば幸いです。