ちょっと話題の記事

AWSでJMeterを使った負荷テスト環境を構築する手順(WindowsありのMaster/Slave構成)

2017.01.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

JMeterで負荷テストをする際に1台の端末から負荷をかけていても負荷が足りない場合があります。そのような場合はJMeterをMaster/Slave構成にし複数台用意する必要があります。今回はAWSでこのような負荷テスト環境を構築する手順をまとめたいと思います。 AWSを使う場合は以下のリンクのページのようにCloudFormationでやる方法が早いのですがAMIやインスタンスタイプ、Java、JMeterのバージョンが古くなるのと、上手く動かなくなった場合にCloudFormationに慣れてないと原因調査に時間をとられることもあるので今回は手作業でやってみたいと思います。

お手軽JMeterクラスター 〜 フルボッコ編|アドカレ2013 : CFn #1

前提条件

今回は以下の前提で構築しています。

  • Master上でテストシナリオを作成したいのでMasterのOSはWindowsを使います。
  • SlaveはAmazon Linuxで構築しています。
  • 2台の仮想マシンは同じVPCの同じサブネット内に構築しました。
  • VPC内の通信はすべて許可しています。
  • Master(Windows)にはリモートデスクトップのポートを自分のIPアドレスから許可しています。
  • Slave(Linux)にはSSHのポートを自分のIPアドレスから許可しています。

fullbok-demo

Slave側の構築

まずはSlaveから構築します。私はt2.microで構築しました。Amazon LinuxでEC2を起動しSSHでログインします。後は以下のコマンドを実行するだけです。 Slaveは複数台になると思うので1台作ってAuto Scalingでスケールアウトするという手もあります。

#アップデート
sudo yum update -y

#JMeterのダウンロード、解凍
sudo wget http://archive.apache.org/dist/jmeter/binaries/apache-jmeter-3.1.tgz -P /opt/
sudo tar zxvf /opt/apache-jmeter-3.1.tgz -C /opt/

#各種設定
sudo echo "`curl -s curl http://169.254.169.254/latest/meta-data/local-ipv4` `hostname`" | sudo tee -a /etc/hosts
sudo sed -i -e "s/^#RMI_HOST_DEF=-Djava.rmi.server.hostname=.*$/RMI_HOST_DEF=-Djava.rmi.server.hostname=$(curl -s http://169.254.169.254/latest/meta-data/local-hostname)/" /opt/apache-jmeter-3.1/bin/jmeter-server
sudo sed -i -e ' /^java/i JVM_ARGS="$JVM_ARGS -Dsun.net.inetaddr.ttl=0"' /opt/apache-jmeter-3.1/bin/jmeter

#サービスの起動
sudo echo "/opt/apache-jmeter-3.1/bin/jmeter-server | logger -p daemon.info &" | sudo tee -a /etc/rc.local
sudo /opt/apache-jmeter-3.1/bin/jmeter-server | logger -p daemon.info &

Master側の構築

今回はWindows Server2012 R2を使います。私はt2.mediumで構築しました。 EC2を構築したらリモートデスクトップで接続し以下の作業を行います。

Javaのインストール

JMeterはJavaの実行環境が必要なのでJavaをインストールします。JREをOracleのサイトからダウンロードしインストールします。今回は1.8を使いました。

無料Javaのダウンロード

JMeterのダウンロード

JMeterを以下からダウンロードします。今回は3.1を使いました。MasterとSlaveのJMeterは同じバージョンにして下さい。

Download Apache JMeter

jmeter.properties

以下の場所にあるjmeter.propertiesという名前の設定ファイルを修正します。
apache-jmeter-3.1/bin/jmeter.properties

remote_hostsという箇所にSlaveのプライベートIPアドレスを指定します。複数ある場合はカンマ区切りで指定します。

#---------------------------------------------------------------------------
# Remote hosts and RMI configuration
#---------------------------------------------------------------------------

# Remote Hosts - comma delimited
remote_hosts=172.31.1.224
#remote_hosts=localhost:1099,localhost:2010

ファイアウォールを無効にする

コントロールパネルからファイアウォールを無効にします。赤枠の部分から無効にできます。

aws_jmeter_master_1

実行する

準備ができたらテストシナリオを作成し実行してみましょう。赤枠の部分か青枠の部分をクリックしてスレッドが実行されれば成功です。

aws_jmeter_master_2

最後に

構築手順は以上になります。Slaveの台数はCloudWatchでCPU使用率やネットワーク入出力などの項目を見て決定します。レスポンスのサイズが大きいとEC2のネットワークが詰まって性能が出ないことがあります。Slaveの台数を増やしても性能が上がらないところまで台数を増やすかスペックを上げましょう。因みにEC2はスペックを上げるとネットワークの性能もよくなります。