コンテンツにスキップ

JMeter

はじめに

本サイトにつきまして、【IT技術の知見】はじめに - 俺の技術ノート をご認識のほど宜しくお願いいたします。


01. セットアップ

yum リポジトリから

$ yum install java-1.8.0-openjdk

$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//jmeter/binaries/apache-jmeter-5.2.1.tgz

$ tar xvzf apache-jmeter-5.2.1.tgz


02. JMeter の仕組み

アーキテクチャ

JMeter は、以下のコンポーネントから構成されている。

jmeter_architecuture


パラメーター

▼ 全体像

JMeter が送信するリクエストの総数はスレッド数とループ数の積であり、それらのリクエストをランプアップ秒の期間で送信する。

stress-test_parameter

▼ スレッド数

リクエストのユーザー数に相当する。

▼ ループ数

ユーザー当たりのリクエスト送信数に相当する。

▼ ランプアップ秒

リクエストを送信する期間に相当する。

長くし過ぎると、すべてのリクエスト数を送信するまでに時間がかかるため、負荷が小さくなる。


03. ロードテスト (負荷テスト)

実行

以下の手順で、JMeter を使用したロードテストを実施する。

  1. URL のアクセスランキングを元に、リクエストを送信するための URL リストを csv ファイルで作成する。Google を参考にしたが、ALB アクセスログを参考にしたほうが、より正確かもしれない。

  2. JMeter の GUI 版にて、シナリオ (jmx ファイル) を作成する。スループットコントローラーで URL リスト (csv ファイル) を JMeter のビルトイン関数で読み込むようにする。

    csvファイルのリストからランダムに読み出したい場合は、Random関数が適している。スレッド数が例えば10000個といった高負荷であると、ローカルマシンがフリーズするため注意すること。

  3. AWS リソースのスペック、VPN など、ロードテストの周辺準備が整っていることを確認する。

  4. JMeter の CUI 版のバイナリファイルに、jmx ファイルをドラッグ&ドロップし、テストを実施する。

    または、バイナリファイルへのパスを通した上で、以下のコマンドでも実行できる。

    $ jmeter -n \
        -t <JMXファイルへのパス> \
        -l <Resultファイルへのパス> \
        -e \
        -o <レポートファイルへのパス>
    

    ここで、GUI 版を使用しない理由は、コマンドの結果に表示される説明より、GUI 版では正しい結果を得られないとのことのためである。

    # コマンドの結果
    Don't use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use CLI Mode (was NON GUI):
    
  5. テストを開始後に、結果 (jtl ファイル) とログ (log ファイル) が作成され、テストが終了するまで追記されていく。

  6. テストを修正して新しく実行したい場合、jmx ファイル、jtl ファイル、log ファイルをコピーして、バックアップしておく。


結果の評価

  1. JMeter の GUI 版にて、スレッドグループに、結果をツリーで表示、結果を表で表示のリスナーを追加する。

    これらの画面で、jtlファイルを読み込むと、jtlファイルに基づく集計データを得られる。

  2. 各種の Amazon CloudWatch Metrics にて、テスト時間帯に着目し、プロットから、数値を読み取る。


04. ストレステスト

スレッド数を段階的に増やして想定以上の負荷をかけ、システムが処理できなくなる限界の負荷と、その時の挙動を確認する。