Pocket

複数台のJMeterサーバで負荷試験を行う方法

  • add this entry to hatena bookmark

JMeterを使って負荷試験を行う際には、負荷を生成するマシンスペックにも気を配る必要があります。

例えば、JMeter をインストールしたWindows端末のGUI画面でシナリオを作成し、そのまま(1台のWindows端末のみで)負荷試験を行った際には、そのWindows端末のスペックがボトルネックになってしまうケースがあります。

そんな時は、JMeterの機能で用意されているリモートテストの仕組みを利用する事が可能です。負荷を生成するマシンを必要に応じた台数分使う事が可能になるため、より多くの負荷を生成できる事になります。

JMeter試験環境

今回の負荷試験は以下のような環境となります。

JMeter_Remote_Test

JMeter クライアントは、Windows端末で、GUI環境で簡単なシナリオを作成し、負荷試験の実行指示を行います。

JMeterサーバは、AWS EC2環境を使います。jmeter-serverを起動し、WindowsのJMeterからの実行指示を受け、負荷試験を実施します。

なお、JMeterクライアントとJMeterサーバは、同じバージョンのJMeterを使う必要があります。

負荷試験対象は、別環境で起動しているWebサーバを使いました。

1.JMeterサーバの用意

まず、JMeterサーバを用意する事にします。

apache-jmeter-2.9.zip をダウンロードし、実行可能な状態にします。

# java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.11) (amazon-61.1.11.11.53.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
#
# wget http://ftp.tsukuba.wide.ad.jp/software/apache//jmeter/binaries/apache-jmeter-2.9.zip
# md5sum apache-jmeter-2.9.zip
# unzip apache-jmeter-2.9.zip
# mv apache-jmeter-2.9 /usr/local/jmeter-2.9
# cd /usr/local/jmeter-2.9/bin
# chmod 755 jmeter
# chmod 755 jmeter-server

次に、jmeter-server ファイルを開き「java.rmi.server.hostname」の値として、JMeterへの接続アドレスを設定します。

RMI_HOST_DEF=-Djava.rmi.server.hostname=ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com

その後、jmeter-server を起動します。

# ./jmeter-server &
[1] 20102
# Created remote object: UnicastServerRef [liveRef: [endpoint:[ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com:xxxxx](local),objID:[xxxx省略xxxx]]]

#

実行結果は、デフォルトでは「bin/jmeter-server.log」で確認できます。

用意するJMeterサーバの台数分、同じような設定を行います。

ここまでで、JMeterサーバの設定は一旦完了です。

2.JMeterクライアントの設定

次にJMeterクライアントの設定を行います。

「jmeter.properties」ファイルで「remote_hosts」の設定を行います。

remote_hosts=ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com:1099,ec2-yyy-yyy-yyy-yyy.ap-northeast-y.compute.amazonaws.com:1099

なお、JMeterサーバはデフォルトでは「1099」ポートで起動している為、ポート1099を指定しています。

3.負荷試験の実行

あとは、JMeterクライアントでシナリオを作成し、実行する事になります。

負荷試験を実行する際には、「実行」メニューから、「開始(リモート)」で負荷試験を実行するJMeterサーバを指定する事が可能です。

jmeter-remote

もしくは、「実行」メニューから、「全て開始(リモート)」で全てのJMeterサーバを使って負荷試験を実行する事が可能です。

jmeter-remote-all

試験を実行すると、JMeterクライアントからJMeterサーバに対して実行指示が出され、JMeterサーバが負荷試験を実行します。

JMeterサーバでの実行状況は、デフォルトでは「bin/jmeter-server.log」で確認でき、負荷試験の実行が終了した際には、以下のログが出力されます。

Finished the test on host ec2-xxx-xxx-xxx-xxx.ap-northeast-x.compute.amazonaws.com:1099 省略

補足ですが、JMeterクライアントで設定していたリスナー「グラフ表示」の画面は以下になりました。

補足

JMeterクライアントとJMeterサーバは、お互いに通信を行います。JMeterクライアントからJMeterサーバへの通信だけではなく、JMeterサーバからJMeterクライアントへの通信も発生します。

よって、JMeterクライアントとJMeterサーバ間のネットワーク経路において、FireWallやProxyがある場合は、少し工夫が必要になります。

また、EC2では、ElasticIPsは使わず、Public DNS を使いました。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。