第6回:チューニング実施と効果測定までで、一通り負荷テストの実施ができるようになりました。しかしながら、高い負荷をかける場合は、JMeterがボトルネックになってしまう場合があります。そのような場合は、下の図のようなマスタスレーブ構成を用いて負荷テストの実行を行うことになります。
この記事では、マスタスレーブ構成の構築とテスト実行時の注意点について解説していきます。
※Linuxサーバ上にマスタのみ構築する場合は、「マスタのインストール」を確認ください。
マスタのセットアップ
第2回:CentOS環境へのJMeterインストールと実行コマンドを参考にマスタのセットアップを行ってください。
スレーブのセットアップ
JMeterのインストール
まずは、マスタと同様の要領でインストールと動作確認を行います。マスタサーバの複製ができる場合は、複製を行っても構いません。
RMIの設定
自サーバのローカルIPアドレスを指定する必要があります。「192.168.40.109」の場合は次のように設定します。
$ sed -i_`date +%Y%m%d` -e s/#RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx/RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.40.109/g /usr/local/jmeter/bin/jmeter-server
$ diff /usr/local/jmeter/bin/jmeter-server{,_`date +%Y%m%d`}
30c30
< RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.40.109
---
> #RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
jmeter-serverの自動起動設定
JMeterのスレーブはjmeter-serverを自動起動させます。rc.localの最下段に下記を追加します。
$ vi /etc/rc.d/rc.local
以下を追加
$ JMeterサーバの自動起動設定
/usr/local/jmeter/bin/jmeter-server &
サーバを再起動させて自動起動の確認を行います。
$ shutdown -r now
再度ログインを行う
$ ps auwxxx|grep jmeter
root 1206 0.0 0.1 115408 1428 ? S 17:44 0:00 /bin/sh /usr/local/jmeter/bin/jmeter-server
root 1211 0.0 0.1 115408 1528 ? S 17:44 0:00 /bin/sh /usr/local/jmeter/bin/jmeter -Dserver_port=1099 -s -j jmeter-server.log
root 1254 49.0 5.0 2316476 51132 ? Sl 17:44 0:00 /usr/bin/java -server -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx256m -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20 -Djava.security.egd=file:/dev/urandom -Duser.language=en -Duser.region=EN -jar /usr/local/jmeter/bin/ApacheJMeter.jar -Dserver_port=1099 -s -j jmeter-server.log
root 1303 0.0 0.0 112828 968 pts/0 R+ 17:44 0:00 grep --color=auto jmeter
マスタスレーブ連携設定
マスタへスレーブ登録
マスタサーバへスレーブサーバの登録を行う必要があります。登録は、マスタの「jmeter.properties」ファイルに対して行います。
$ sed -i_`date +%Y%m%d` -e s/remote_hosts=127.0.0.1/remote_hosts=192.168.40.109/g /usr/local/jmeter/bin/jmeter.properties
$ diff /usr/local/jmeter/bin/jmeter.properties{,_`date +%Y%m%d`}
260c260
< remote_hosts=192.168.40.109
---
> remote_hosts=127.0.0.1
各スレーブへのファイル共有
スレーブを利用する場合は、ファイル共有が必要な場合があります。シナリオファイルはマスタにのみ存在している状態で問題ありません。しかしながら、csvファイルなど各サーバから読み込む必要があるファイルについては、各サーバへ配布する必要があります。
ファイル | 共有有無 |
---|---|
シナリオ | 不要 |
csvなどの入力ファイル | 必要 |
動作確認を実施
これでセットアップが完了したので、スレーブを使ったJMeter実行の動作確認を行います。「-r」オプションをつけることで、スレーブを使った実行が可能です。
$ /usr/local/jmeter/bin/jmeter -n -r -t scenario.jmx -l result.jtl
Creating summariser <summary>
Created the tree successfully using scenario.jmx
Configuring remote engine: 192.168.40.109
Starting distributed test with remote engines: [192.168.40.109] @ Mon Jun 29 15:05:01 JST 2020 (1593410701180)
Remote engines have been started:[192.168.40.109]
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary = 10 in 00:00:14 = 0.7/s Avg: 336 Min: 182 Max: 1436 Err: 0 (0.00%)
Tidying up remote @ Mon Jun 29 15:05:17 JST 2020 (1593410717772)
... end of run
スレーブ利用時の注意点
スレーブを利用すると、複数台のスレーブサーバから負荷をかけることが可能です。スケールさせやすい半面、注意が必要な部分もあるので簡単にまとめておきます。
スレッド数の指定
指定したスレッド数で、各スレーブサーバから実行されます。スレーブサーバの台数を増やしたにもかかわらず、スレッド数の変更をしないと合計スレッド数が一気に大きくなってしまいます。
たとえば、スレッド数100でスレーブ1台のみで実行した場合はスレッド数は100となり、スレーブ2台の場合は「100×2」でスレッド数200になります。JMeterの負荷分散のつもりが、急激な負荷上昇につながるので注意しましょう。
入力ファイル
入力ファイルは、各スレーブに配布する必要があります。配布するデータを同一のものにしてしまうと、各スレーブ間で重複したデータを利用することになります。
重複させたくない場合は、各スレーブに配布するデータが重複しないように注意しましょう。
カウンタ
一意な値を取得するためにカウンタを利用することがあります。
カウンタは、各サーバごとにカウントアップされるので、各スレーブで同一の値を利用することになります。全体で一意のものを作成したい場合はホスト名やIPアドレスを含めるなど工夫が必要です。
まとめ
この記事では、より大きな負荷をかけるためにマスタスレーブ構成で負荷テストを行う方法をまとめました。
大きな負荷をかけていくと、予期せぬエラーやスレーブサーバ側のチューニングも必要になってくることもあります。ひとつ一つ課題を解消していけるといいですね。
~~~~~~~~~~~~~~~~~~~~~
~ JMeterによる負荷テスト実施入門 ~
~~~~~~~~~~~~~~~~~~~~~
第1回:JMeterによる負荷テスト実施入門
第2回:CentOS環境へのJMeterインストールと実行コマンド
第3回:基礎データの取得方法
第4回:低負荷テストの実施方法
第5回:限界スループットの確認方法
第6回:チューニング実施と効果測定
第7回:マスタスレーブ構成を用いた負荷テストの行い方
参考サービス紹介:JMeterを使った負荷テストツール