テスト実施#7_マスタスレーブ構成を用いた負荷テストの行い方

第6回:チューニング実施と効果測定までで、一通り負荷テストの実施ができるようになりました。しかしながら、高い負荷をかける場合は、JMeterがボトルネックになってしまう場合があります。そのような場合は、下の図のようなマスタスレーブ構成を用いて負荷テストの実行を行うことになります。

JMeterのマスタ・スレーブ構成

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を使った負荷テストツール

コメントは受け付けていません。