はじめに
秒間1万リクエストの負荷を実施にあたって、
Jmeter単体では負荷が出せなかったのでクラスター構成のJmeterで実施しました。
Jmeterのローカルでのテスト実施方法などは以下を参照してください。
基本的な設定ファイルの作成も今回は省略します。
Jmeterをローカル環境でテスト
負荷試験を確認するための基礎的で不可欠な知識
クラスタ構成の概要
マスターサーバー、スレーブサーバー(複数台)という構成で実施します。
マスターサーバーに設定ファイルを置いて実行することで、
スレーブから結果ログなどをマスターサーバーへ集約する形で実行してくれます。
ですので、スレーブサーバー側ではJmeterの起動だけしておけばOKです。
マスターサーバーのセットアップ
やることの大まかな流れとしては、
- jmeterのインストール
- 解凍
- スレーブサーバーの設定
jmeterのインストール
/home/ec2-userにて、
$ sudo yum update -y
$ wget http://ftp.riken.jp/net/apache//jmeter/binaries/apache-jmeter-5.1.1
解凍
$ tar zxvf apache-jmeter-5.1.1.tgz
スレーブサーバーの設定
プロパティをいじります。
apache-jmeter-5.1.1のbin配下に行き、
vimでプロパティを開き、リモートホストの記載欄にスレーブサーバーのDNSネームを記載。
IPアドレスを記載するとエラーなどでこけることがあるそうなので注意。
なお、複数スレーブを記載する場合はカンマ区切りで記載すればOK。
cd apache-jmeter-5.1.1/bin/
sudo vim jmeter.properties
remote_hosts=ec2-aa-aa-aa-aa.ap-northeast-1.compute.amazonaws.com
スレーブサーバーのセットアップ
- jmeterのインストール
- 解凍
- Jmeterの起動
jmeterの起動
起動前にプロセスを確認。立ち上がってない。
$ ps -aux | grep jemter
ec2-user 14418 0.0 0.0 119468 896 pts/1 S+ 11:36 0:00 grep --color=auto jemter
起動
/home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server &
もう一度プロセスを確認。jmeterが立ち上がっている。
$ ps -aux | grep jmeter
ec2-user 4324 0.0 0.0 119928 2856 pts/0 S 11:43 0:00 /bin/sh /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server
ec2-user 4326 0.0 0.0 119928 2892 pts/0 S 11:43 0:00 /bin/sh /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter -Dserver_port=1099 -s -j jmeter-server.log
ec2-user 4354 0.4 2.0 7934128 158084 pts/0 Sl 11:43 0:02 /usr/bin/java -server -XX:+HeapDumpOnOutOfMemoryError -Xms4g -Xmx4g -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20 -Djava.security.egd=file:/dev/urandom -Duser.language=en -Duser.region=EN -jar /home/ec2-user/apache-jmeter-5.1.1/bin/ApacheJMeter.jar -Dserver_port=1099 -s -j jmeter-server.log
いざ負荷試験
スレーブサーバーでJmeterを起動できれば、
マスターサーバーからの指示待ち状態になっているので、負荷試験を実施します。
今回プロセスを確認するために/home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server &
コマンドのあとに
キャンセルしましたが、通常は立ち上げっぱなしで大丈夫です。
キャンセルしてもプロセスは上がり続けてるので大丈夫なのですが念の為。
sudoしないと怒られるのでしてください。
起動コマンドは/home/ec2-user/apache-jmeter-5.1.1/bin/jmeter
で、
-nがCUIモードでの起動、-tが設定ファイルの指定のオプションです。
なお、設定ファイルは絶対パスで指定してあげないと怒られることがあります。
$ sudo su
$ /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter -n -t /home/ec2-user/test.jmx -r
Creating summariser <summary>
Created the tree successfully using /home/ec2-user/test.jmx
Configuring remote engine: ec2-aa-aa-aa-aa.ap-northeast-1.compute.amazonaws.com
Exception creating connection to: ec2-aa-aa-aa-aa.ap.ap-northeast-1.compute.amazonaws.com; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
Failed to configure ec2-aa-aa-aa-aa.ap.ap-northeast-1.compute.amazonaws.com
Stopping remote engines
Remote engines have been stopped
Error in NonGUIDriver java.lang.RuntimeException: Following remote engines could not be configured:[ec2-aa-aa-aa-aa.ap.ap-northeast-1.compute.amazonaws.com]
Error in NonGUIDriver java.lang.RuntimeExceptionというやつがたまにでるのですが、
この場合はスレーブ側で何かしら問題が発生しているので、jmeterを再起動してあげるのがよいです。
もしrebootができないのであれば、プロセスをKillしましょう。
killするプロセスは3つ表示のうち1番下です。
$ ps -aux | grep jmeter
ec2-user 4324 0.0 0.0 119928 2856 pts/0 S 11:43 0:00 /bin/sh /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server
ec2-user 4326 0.0 0.0 119928 2892 pts/0 S 11:43 0:00 /bin/sh /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter -Dserver_port=1099 -s -j jmeter-server.log
ec2-user 4354 0.4 2.0 7934128 158084 pts/0 Sl 11:43 0:02 /usr/bin/java -server -XX:+HeapDumpOnOutOfMemoryError -Xms4g -Xmx4g -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20 -Djava.security.egd=file:/dev/urandom -Duser.language=en -Duser.region=EN -jar /home/ec2-user/apache-jmeter-5.1.1/bin/ApacheJMeter.jar -Dserver_port=1099 -s -j jmeter-server.log
$ kill 4354
$ ps -aux | grep jmeter
ec2-user 4476 0.0 0.0 119468 976 pts/0 S+ 11:59 0:00 grep --color=auto jmeter
[1]+ Exit 143 /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server
その後再起動
$ /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server &
マスターサーバーに戻り、再度実行
$ /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter -n -t imp-test.jmx -r
Creating summariser <summary>
Created the tree successfully using imp-test.jmx
Configuring remote engine: ec2-aa-aa-aa-aa.ap-northeast-1.compute.amazonaws.com
Starting remote engines
Starting the test @ Fri Sep 13 12:07:54 UTC 2019 (1568376474892)
Remote engines have been started
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
このWaiting forが表示されたら無事負荷試験成功です!