開発者ドキュメント

ApacheJMeterを使用してWebサーバーで負荷テストを実行する方法

序章

このチュートリアルでは、Apache JMeterを使用して、Webアプリケーション環境で基本的な負荷テストとストレステストを実行する方法について説明します。 グラフィカルユーザーインターフェイスを使用してテストプランを作成し、Webサーバーに対してテストを実行する方法を示します。

JMeterは、テストをロードしてパフォーマンスを測定するように設計されたオープンソースのデスクトップJavaアプリケーションです。 さまざまなシナリオの負荷をシミュレートし、CSVファイルやXMLファイル、グラフなど、いくつかの方法でパフォーマンスデータを出力するために使用できます。 100%Javaであるため、Java6以降をサポートするすべてのOSで使用できます。

前提条件

このチュートリアルに従うには、JMeterを実行できるコンピューターと、負荷テストを行うWebサーバーが必要です。 負荷を処理できることがわかっている場合を除いて、実稼働サーバーに対してこれらのテストを実行しないでください。サーバーのパフォーマンスに悪影響を与える可能性があります。

このチュートリアルのテストは、独自のWebアプリケーションのいずれかに適合させることができます。 例としてテストしているWebサーバーは、NYC2DigitalOceanDatacenterのLEMPスタックでWordPressを実行している1CPU/ 512MBVPSです。 JMeterコンピューターは、ニューヨークのDigitalOceanオフィスで実行されています(これは、テストの待機時間に関連しています)。

JMeterのテスト結果は、JMeterで使用可能なシステムリソース(CPUとRAM)や、JMeterとテスト対象のWebサーバー間のネットワークなど、さまざまな要因によって歪む可能性があることに注意してください。 JMeterが結果を歪めることなく生成できる負荷のサイズは、非グラフィカルモードでテストを実行するか、負荷生成を複数のJMeterサーバーに分散することで増やすことができます。

JMeterをインストールします

デスクトップアプリケーションとしてApacheJMeterを使用しており、さまざまなデスクトップOSが使用されているため、特定のOSに対するJMeterのインストール手順については説明しません。 そうは言っても、JMeterのインストールは非常に簡単です。 インストールする最も簡単な方法は、パッケージマネージャーを使用することです(例: apt-getまたはHomebrew)、または公式サイトからJMeterバイナリをダウンロードしてアーカイブ解除し、Java(バージョン6以降)をインストールします。

JMeterを実行するために必須のアーカイブへのリンクを含むソフトウェアのリストを次に示します。

Javaのインストール方法によっては、JavabinディレクトリをPATH環境変数に追加して、JMeterがJavaおよびkeytoolバイナリを見つけられるようにする必要がある場合があります。

また、JMeterをインストールしたパス(アーカイブを解除したディレクトリ)を$JMETER_HOMEと呼びます。 したがって、LinuxまたはUnixベースのOSを使用している場合、JMeterバイナリは$JMETER_HOME/bin/jmeterにあります。 Windowsを実行している場合は、$JMETER_HOME/bin/jmeter.batを実行できます。

参考までに、このチュートリアルを作成するときは、次のソフトウェアバージョンを使用しました。

JMeterをインストールして実行したら、テスト計画の作成に移りましょう。

基本的なテスト計画の作成

JMeterを起動すると、テストプランが空のグラフィカルユーザーインターフェイスが表示されます。

テスト計画は、負荷テストのシミュレーション方法を決定する一連のテストコンポーネントで構成されます。 これらのコンポーネントをテスト計画に追加するときに、これらのコンポーネントのいくつかをどのように使用できるかを説明します。

スレッドグループを追加する

まず、スレッドグループテストプランに追加します。

  1. テストプランを右クリックします
  2. 上にマウスを置く>を追加
  3. スレッド(ユーザー)にマウスを合わせる>
  4. スレッドグループをクリックします

スレッドグループには、負荷テストに影響を与える3つの特に重要なプロパティがあります。

HTTPリクエストのデフォルトを追加する

HTTPリクエストのデフォルト構成要素は、テストプランでHTTPリクエストのデフォルト値を設定するために使用されます。 これは、テストの一環として複数のHTTPリクエストを同じサーバーに送信する場合に特に便利です。 次に、HTTPリクエストのデフォルトスレッドグループに追加しましょう。

  1. スレッドグループを選択し、右クリックします
  2. 上にマウスを置く>を追加
  3. 構成要素>にマウスを合わせる
  4. HTTPリクエストのデフォルトをクリックします

[HTTPリクエストのデフォルト]の[Webサーバー]セクションで、サーバー名またはIP フィールドに、テストするWebサーバーの名前またはIPアドレスを入力します。 ここでサーバーを設定すると、このスレッドグループの残りのアイテムのデフォルトサーバーになります。

WebサーバーがCookieを使用している場合は、HTTP Cookie Managerをスレッドグループに追加することで、Cookieのサポートを追加できます。

  1. スレッドグループを選択し、右クリックします
  2. 上にマウスを置く>を追加
  3. 構成要素>にマウスを合わせる
  4. HTTP CookieManagerをクリックします

HTTPリクエストサンプラーを追加する

次に、 HTTPリクエストサンプラーをスレッドグループに追加します。これは、各スレッド(ユーザー)がアクセスするページリクエストを表します。

  1. スレッドグループを選択し、右クリックします
  2. 上にマウスを置く>を追加
  3. サンプラー>にマウスを合わせる
  4. HTTPリクエストをクリックします

[HTTPリクエスト]の[HTTPリクエスト]セクションで、パスに各スレッド(ユーザー)にリクエストするアイテムを入力します。 これを/に設定して、各スレッドがサーバーのホームページにアクセスするようにします。 サーバーはHTTPリクエストのデフォルト項目ですでに指定されているため、この項目でサーバーを指定する必要はないことに注意してください。

注:テストの一部としてHTTPリクエストをさらに追加する場合は、この手順を繰り返します。 すべてのスレッドは、このテストプランのすべての要求を実行します。

テーブルリスナーに結果の表示を追加する

JMeterでは、リスナーを使用して負荷テストの結果を出力します。 利用可能なリスナーにはさまざまなものがあり、プラグインをインストールすることで他のリスナーを追加できます。 読みやすいので表を使用します。

  1. スレッドグループを選択し、右クリックします
  2. 上にマウスを置く>を追加
  3. リスナーの上にマウスを置く>
  4. テーブルで結果を表示をクリックします

ファイル名の値を入力して、結果をCSVファイルに出力することもできます。

基本テストプランを実行する

基本的なテスト計画が設定されたので、それを実行して結果を確認しましょう。

まず、ファイル保存の順にクリックしてテストプランを保存し、目的のファイル名を指定します。 次に、左側のペインで [結果をテーブルに表示]を選択し、メインメニューから実行をクリックしてから、開始をクリックします(または、下の緑色の開始矢印をクリックします。メインメニュー)。 テストは次のように実行されるため、表にテスト結果が表示されます。

結果の解釈

すべてのリクエストのステータスが「成功」であることがわかります(チェックマークが付いた緑色の三角形で示されています)。 その後、おそらく最も関心のある列は、サンプル時間(ミリ秒)およびレイテンシー(例には表示されていません)列です。

生成されたテーブルによると、サンプル時間の範囲は128〜164ミリ秒でした。 これは、基本的なホームページ(約55 KB)の妥当な応答時間です。 例に示されているように、Webアプリケーションサーバーがリソースに苦労していない場合、サンプル時間は主に地理的な距離(通常は待ち時間が長くなります)と要求されたアイテムのサイズ(転送時間が長くなります)の影響を受けます。 あなたの個人的な結果は例とは異なります。

したがって、私たちのサーバーは、55 KBのWordPressホームページに10秒間(毎秒5回)アクセスする50人のユーザーのシミュレーションに耐え、許容できる応答を示しました。 スレッドの数を増やすとどうなるか見てみましょう。

負荷を増やす

10秒間で80スレッドで同じテストを試してみましょう。 左ペインのスレッドグループ項目で、スレッド数(ユーザー)80に変更します。 次に、 [結果をテーブルに表示]をクリックしてから、開始をクリックします。 サンプルサーバーでは、次の表になります。

ご覧のとおり、サンプル時間は1秒近くに増加しました。これは、Webアプリケーションサーバーがリクエストによって過負荷になり始めていることを示しています。 VPSにログインして、負荷テスト中のリソース使用量を簡単に確認してみましょう。

SSH経由でWebサーバーにログインし、topを実行します。

top

サーバーに積極的にアクセスしているユーザーがいない限り、CPUのユーザー使用率( us )は非常に低いか0%であり、CPUの%はアイドル状態()であることがわかります。 id )は、次のように99%以上である必要があります。

ここで、 JMeter でテストを再開してから、WebサーバーのSSHセッションに戻ります。 リソース使用量の増加が見られるはずです。

この例の場合、CPUの%ユーザー使用率は94%であり、システム使用率( sy )は4.7%で、0%はアイドル状態です。 上の画像に示されているように、メモリが不足していないため、パフォーマンスの低下はCPUパワーの不足によるものです。 また、WordPressにサービスを提供しているphp5-fpmプロセスがCPUの大部分(約96 % cを組み合わせたもの)を使用していることもわかります。

この80ユーザーのシミュレーションの要求を10秒で満たすには、CPUを増やすか、サーバーのセットアップを最適化してCPUの使用量を減らす必要があります。 WordPressの場合、MySQLデータベース(CPUの一部を使用)を別のサーバーに移動し、キャッシュを実装することもできます(これにより、CPU使用率が低下します)。

興味がある場合は、テストのスレッド数を調整して、サーバーがパフォーマンスの低下を示し始める前に処理できるスレッド数を確認できます。 1 CPUドロップレットの例の場合、10秒間で72スレッドを使用するまでは正常に機能します。

結論

JMeterは、ボトルネックを減らしてパフォーマンスを向上させるために、Webアプリケーションサーバーのセットアップをどのように改善するかを決定するための非常に貴重なツールになります。 JMeterの基本的な使用法に慣れてきたので、さまざまなシナリオでサーバーのパフォーマンスを測定するための新しいテストプランを自由に作成してください。

例として使用したテストは、通常のユーザーの使用パターンを正確に反映していませんが、JMeterには、ご使用の環境で役立つ可能性のあるさまざまなテストを実行するためのツールがあります。 たとえば、JMeterは、ユーザーがアプリケーションにログインし、クライアント側でキャッシュし、URL書き換えを使用してユーザーセッションを処理することをシミュレートするように構成できます。 目的のシナリオを構築するのに役立つ、他の多くの組み込みサンプラー、リスナー、および構成ツールがあります。 さらに、その機能を強化するJMeterプラグインがあり、http://jmeter-plugins.org/からダウンロードできます。

モバイルバージョンを終了