Webサービスがアクセスの集中したピーク時にもきちんと動作するかどうかは、可用性に関わる重要なポイントです。JMeterはサーバーの負荷テストやパフォーマンスの計測が行えるツールの一つで、オープンソースでありながら機能も豊富であることから人気が高く、広く使用されています。本記事では、JMeterの仕組みや特徴、使い方、注意点などについて詳しく解説します。
目次
JMeterとは
JMeterとは、Webサービスを中心にさまざまなアプリケーションの負荷テストおよびパフォーマンスの計測が行えるツールです。Apacheソフトウェア財団によって開発されているJavaアプリケーションで、正式名称は「Apache JMeter」です。オープンソースであることや利用制限がないこと、多機能であることから、システムの性能測定に広く利用されています。
JMeterの仕組み
JMeterは対象となるサーバーに対して指定した量のリクエストを送り、受け取ったレスポンスを収集、統計を算出することでパフォーマンスを計測できます。レスポンス内容を検証することができるため、簡易的な機能テストとして使用することも可能です。豊富なプラグインが用意されておりカスタマイズの幅も広く、条件分岐などを含むテストシナリオを作成することもできます。
JMeterの特徴
JMeterには以下のような特徴があります。
オープンソースライセンス
JMeterは無料で利用でき、開発者は開発のためにソースコードを使用することができます。
多くのアプリケーションのテストが可能
Webサイトを閲覧するためのプロトコルであるHTTP/HTTPSだけでなく、JMeterはさまざまなプロトコルに対応しています。対応可能なアプリケーションは以下が挙げられます。
- Web:HTTP、HTTPS(Java、NodeJS、PHP、ASP.NET など)
- Webサービス:SOAP/REST
- FTP
- JDBC経由のデータベース
- LDAP
- メール:SMTP、POP3、IMAP
- TCP
- ネイティブコマンドまたはシェルスクリプト
- Javaオブジェクト
拡張性が高い
JMeterはプラグインを追加することで、より高度なテストのための機能を利用したり、利便性を高めることができます。負荷のかけ方をコントロールするプラグイン、ログイン認証など動的な入力をテストするプラグイン、シナリオデータ分析と可視化のためのプラグインなど、充実した機能をすぐに利用することができます。
結果分析のためのツールが豊富
テスト結果をグラフ形式やツリー形式で表示したり、統計情報を取得したりする機能・プラグインが豊富に用意されています。簡単な操作で結果をさまざまな形式で確認でき、分析に役立てることができます。
Web上に情報が多い
JMeterは歴史が長く利用者も多いため、Web上に多くの情報が掲載されています。作業中にエラーが発生したり疑問が浮かんだりしても、Webで検索することで自己解決しやすいこともメリットの一つです。
JMeterの使い方
では、実際にJMeterはどのように使用するのでしょうか。JMeterのインストール方法から負荷テストの手順について解説します。
JMeterのインストール
JMeterのインストールは以下の手順で行います。
1. Javaのインストール
JMeterはJavaで作成されているため、実行するにはJava8以降が必要です。インストールされていない場合はJava公式サイトからインストールします。
2. JMeterのインストール
Apache公式サイトからJMeterのパッケージをダウンロードし、解凍してインストールします。
3. JMeterの起動
JMeterは「GUIモード」「CLIモード」「サーバーモード」の3種類のモードで起動できます。
- GUIモード:テスト計画や設定、結果の分析などの際に使用します。
- CLIモード:実際に負荷テストを実行する際に使用します。「負荷テストをGUIモードで実行しないでください」という注意書きが公式サイトに繰り返し書かれています。
- サーバーモード:複数のホストに構築したJMeterから分散して負荷をかけたい場合に使用します。
負荷テスト手順
負荷テストは以下の手順で行います。
1. テスト計画の準備
テスト計画を作成するために、まずはJMeterをGUIモードで起動します。ダウンロードしたJMeterのフォルダの/binディレクトリにある「jmeter.bat」(Windows) もしくは「jmeter」(Unix)を実行するとJMeterをGUIモードで起動できます。JMeterを開くと新規のテスト計画が作成されているので、このテスト計画の名前をわかりやすいものに変更して利用するか、もしくは新たなテスト計画を作成します
2.スレッドグループの追加・設定
テスト計画にスレッドグループを追加します。スレッドグループとは、テストで実行する内容を制御するグループのことで、以下のパラメータを指定します。
- スレッド数:送信するリクエスト数
- Ramp-up期間:設定したスレッド数を何秒間で送信するか
- ループ回数:設定スレッド数を送信する数
テストケースで送信されるリクエスト数の合計は、スレッド数×ループ回数となります。そして各スレッドは、Ramp-upに設定した時間をスレッド数で割った間隔で送信されます。
例1:[スレッド数]=100、[Ramp-Up期間]=100、[ループ回数]=1と設定した場合
「100のスレッドを100秒かけて1回だけ実行する」という意味になります。この例では1秒に1回ずつリクエストが投げられることになります。
例2:[スレッド数]=10、[Ramp-Up期間]=10、[ループ回数]=100と設定した場合
「10のスレッドを10秒かけて100回実行する」ので、1秒ごとに100回ずつリクエストが投げられることになります。
なかなか直感的に理解しづらいですが、同時にアクセスする数を増やしてテストしたい場合は、設定するループ回数を増やすということになります。
また、テストケースを作成する際の注意点としては、高負荷/長時間の負荷テストを行いたい場合、負荷をかけるJMeter側のリソースが枯渇してダウンしてしまう場合があります。特に[スレッド数]は、JMeterはテスト開始と同時に指定された数のスレッドを全て作成するため、フリーズしてしまう可能性が高まります。(※)
そのため、長時間にわたる継続的な試験を行いたい場合は、タイマー機能や負荷のかけ方をコントロールできる拡張プラグインを使用するとよいでしょう。
※参考:KEIS BLOG「JMeter の利用方法(1) – Ramp-up、スレッド数、ループ回数の誤用」
3. サンプラーの追加・設定
サンプラーとはテスト対象のサーバーにリクエストを送信するコンポーネントで、送信先やプロトコルなどを設定します。WebサーバーへHTTPリクエストを送信する場合は、スレッドグループにHTTP Requestのサンプラーを追加します。
HTTP Requestのサンプラーに設定するパラメータは以下のとおりです。
- プロトコル:http もしくは https
- サーバ名またはIP:テスト対象サーバーのホスト名またはIPアドレス
- ポート番号:http なら 80、https なら 443
- メソッド:通常は GET
- パス:root相対パス
4. リスナーの追加・設定
リスナーとは、負荷テストの実行結果を利用用途に応じた形式で表示するコンポーネントです。グラフ形式やツリー形式、集計レポート、概要レポートなど、さまざまな出力形式が用意されています。
5. テストの実行
ここまでの設定を終えたら、保存ボタンを押してテスト計画をファイルとして保存します。実行ボタンを押すとGUI上でそのままテストを実行することもできてしまうのですが、テストの実行はCLIモードで行うことが推奨されています。GUIの処理にリソースが費やされてしまい、テストの実行時間に影響することで正確な結果が得られないためです。
そのため、GUIで作成したテスト計画は一度ファイルとして保存し、できたテスト計画ファイル(.jmx形式)をCLIモードで実行することになります。JMeterの/binフォルダ内には便利なスクリプトが用意されており、その中の「jmeter-n.cmd」はテストをCLIモードで実行するスクリプトのため、このショートカットを作成しておくと、.jmxファイルをショートカットにドロップするだけでテストを実行することができます。
CLIモードでテストを実行するとコマンドプロンプトでサマリーが出力され、コマンドプロンプトが閉じればテスト終了となります。
6. テスト結果の確認
テスト実行後、テスト計画ファイルと同じディレクトリにレポートファイル(.jtl)とログファイル(.log)が出力されます。JMeterのリスナーにレポートファイルを読み込ませることで、グラフや表などを確認することができます。
JMeterを手軽に利用するなら
JMeterはオープンソースのツールで無料で利用でき、Web上に情報もたくさん公開されているのでそれらを参照しながらテストケースを作成し、実行することができるでしょう。しかし、JMeterを利用する上では以下についても注意する必要があります。
- JMeterを実行するマシンのCPU・メモリ・ネットワークに関するサイジング
- OSのチューニング
- Javaのセットアップ
- Javaのヒープサイズ(※)の変更
※ヒープサイズ:プログラム実行時に生成されるオブジェクトのためのメモリ領域
クラウドサーバーサービス「リンク ベアメタルクラウド」では、JMeterを自分で構築しなくても、管理画面から診断対象のホストとURLを入力し、負荷パターンを選択することで簡易的な負荷テストを行うことができます。テストのサマリーと分析結果はレポート化されてメールで送信されるため、気軽に負荷テストを実施してみることができます。
簡易的なテストだけでなく、シナリオや条件などを含んだ高度な負荷試験をご希望の場合は、有償オプションとして対応が可能です。もし自分でJMeterを構築し、テストを実施するのが難しいと感じた場合は、相談してみてはいかがでしょうか。
まとめ
JMeterは歴史があり利用者の多い人気のツールです。オープンソースであることや多機能であることなどから幅広く利用されています。使い方を習得しておけば役に立つ場面は多いでしょう。ただし正確なテスト結果を得るにはコマンドラインモードで実行すること、そしてJMeterを実行する環境のスペックやチューニングなどに注意してください。
「リンク ベアメタルクラウド」では、JMeterを利用した簡易的な負荷テストを標準で提供しています。その他、負荷テストの相談や、サーバーのサイジングのご相談なども承っています。高負荷に耐えられるWebサイト・Webサービスを開発する際には、ぜひベアメタルクラウドにご相談ください。