Mac の JMeter クライアントから EC2 環境の JMeter サーバを使って負荷試験を行う

AWS Advent Calendar 2014 - Qiita の14日目です。


シナリオを用いて行う負荷試験で JMeter を使う方は多いと思います。
JMeter の UI を手元の PC で操作できるようになると、作業が少しスムーズになって便利ですよね。
ここでは、自分の MacJMeter クライアント にして、EC2 上の JMeter サーバ を使う設定を行います。

EC2 上の JMeter サーバを動かすための手順

次の手順で設定を進めます。

  1. JMeter サーバ用 EC2 インスタンスを起動する
  2. JMeter サーバの設定、起動
  3. ローカルの PC で ssh ポートフォワーディングの設定を有効化
  4. JMeter クライアントの設定、起動
  5. JMeter サーバを使い終わったら、インスタンスを Stop または Terminate

JMeter のダウンロードや設置については割愛します。

JMeter クライアントと JMeter サーバの連携

今回 JMeter クライアントは自分の Mac のため、ファイアウォールの裏側で実行されています。
EC2 上の JMeter サーバからリモートでテストの実行を行う場合、JMeter クライアントと JMeter サーバの間で JMeterRMI の通信をそれぞれ行える必要があります。


自分の Mac は利用可能なグローバル IP アドレスを持っていません。
外部にある EC2 インスタンスからファイアウォールの裏側の自分の Mac に接続できない状況です。
そこで JMeter クライアントから SSH ポートフォワーディングを使って、JMeter クライアントとサーバを接続できるようにします。


次の各ポートを利用します。

  • Port 24000 (クライアントからサーバへの JMeter 用のポート)
  • Port 25000 (サーバからクライアントへの RMI 通信用ポート)
  • Port 26000 (クライアントからサーバへの RMI 通信用ポート)

JMeter サーバ用 EC2 インスタンスを起動する

Security Group は JMeter クライアントから ssh で接続できるようになっていれば OK です。



設定したポートを利用するために、JMeter クライアントとサーバの設定を変更していきます。

JMeter サーバの設定、起動

設定

bin/jmeter.properties を編集

server_port=24000                   # JMeter 接続に使用するサーバ側のポート
server.rmi.localhostname=127.0.0.1  # サーバ側で RMI 通信に使用するローカルホスト名
server.rmi.localport=26000          # サーバ側で RMI 通信に使用するポート
起動

jmeter-server の起動時、RMIサーバーとして、hostname に localhost(127.0.0.1) を指定します。

bin/jmeter-server -Djava.rmi.server.hostname=127.0.0.1

ローカルの PC で ssh ポートフォワーディングの設定を有効化

次の ssh コマンドで 3つのポートの設定を行います。

ssh -C -L 24000:localhost:24000 -R 25000:localhost:25000 -L 26000:localhost:26000 -N -f <username>@<server>

JMeter クライアント側の設定

bin/jmeter.properties を編集

remote_hosts=127.0.0.1:24000    # JMeter クライアントが使用する JMeter サーバの情報
client.rmi.localport=25000      # JMeter クライアントが RMI 通信で受信に使用するポート
mode=Statistical                # JMeter サーバからの結果の通知方法


接続できていれば、"Run" メニューの "Remote Start" に実行可能なサーバが表示されます。


複数の JMeter サーバに設定する

せっかくリモートの JMeter サーバを使えるようになったのだから複数利用したいですよね。
2台目以降の設定は次のように行います。

2台目の JMeter サーバでの設定

bin/jmeter.properties

server_port=24001
server.rmi.localhostname=127.0.0.1
server.rmi.localport=26001
JMeter クライアントの設定(JMeter サーバ2台の場合)

bin/jmeter.properties

remote_hosts=127.0.0.1:24000,127.0.0.1:24001
client.rmi.localport=25000
mode=Statistical
ssh ポートフォワーディングの設定(2台目用)
ssh -C -L 24001:localhost:24001 -R 25000:localhost:25000 -L 26001:localhost:26001 -N -f <username>@<server2>


client.rmi.localport は、25000 で共通で、server_port, server.rmi.localport はサーバ毎に変えていきます。
今回使用しているポート番号だと、JMeter サーバの台数が1,000台までになってしまうので、1,000台以上の JMeter サーバで構成する場合にはポート番号が重複しない設定をご検討下さい。


それでは、Enjoy testing!