0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

JMeter Client/Server Remote Testing on Docker

はじめに

JMeterの複数VMを利用してClient、そして複数のServerを利用する際の設定についてまとめています。
ぐぐってもトップにヒットする情報(※)ではまともに動かなかった人(自分)向けです。
※Dockerを使った例では、ほとんどが1ホスト内で動かすものです。複数のサーバーを使った場合にハマりやすいです。

実行したい環境

image.png

結論

Serverの実行

JMeterSeverの起動
sudo docker run -it --rm \
     -p20000:20000 \
     justb4/jmeter:latest \
     -s -n -j /dev/stdout \
     -Dserver_port=20000 -Dserver.rmi.localport=20000 \
     -Dserver.rmi.ssl.disable=true \
     -Djava.rmi.server.hostname=$(host $(hostname)| awk '{print $4}') \
     -Jmode=Statistical
  • server_port , server.rmi.localportで使うポートを指定して、-p20000:20000 でポートを空ける。
  • server.rmi.ssl.disable=true はSSLは利用しないので、無効化。
  • java.rmi.server.hostnameではClientからはホストのIPでつけつけるので、ホストのIPを $(host $(hostname)| awk '{print $4}') で埋め込み。
  • Cleint<->Server間の通信が多い(数千qps以上)ので、Statisticalで通信量削減します。

Clientの起動

JMeterClientの起動
sudo docker run -it --rm \
     -v $(pwd):/script -p20001:20001 -p20002:20002 -p20003:20003 \
     justb4/jmeter:latest \
     -Dserver.rmi.ssl.disable=true  \
     -Djava.rmi.server.hostname=$(host $(hostname)| awk '{print $4}') \
     -Dclient.rmi.localport=20001 \
     -Jremote_hosts=server-1:20000,server-2:20000,.... -Jmode=Statistical \
     -t /script/1.jmx -n -l /script/test.jtl -e -r -X
  • client.rmi.localport=20001 でポート番号を固定化。最大3つ使われるので、 -p20001:20001 -p20002:20002 -p20003:20003 でポートを空ける。
  • server.rmi.ssl.disable=true はSSLは利用しないので、無効化。
  • java.rmi.server.hostnameではClientからはホストのIPでつけつけるので、ホストのIPを $(host $(hostname)| awk '{print $4}') で埋め込み。
  • remote_hosts でリモートサーバー指定。
  • -t でスクリプトファイル、 -l で結果ファイルを指定します。

ハマりどころ

Server -> Clientにデータ送信時にエラーが発生する

2020-12-21 12:04:39,730 ERROR o.a.j.t.RemoteThreadsListenerWrapper: Exception invoking listener on threadStarted.
java.rmi.ConnectException: Connection refused to host: xxx.xxx.xxx.xxx; nested exception is:
    java.net.ConnectException: Connection refused (Connection refused)

At the moment JMeter will open up to three ports beginning with the port defined in client.rmi.localport. If there are any firewalls or other network filters between JMeter client and server, you will need to make sure that they are set up to allow the connections through.
https://jmeter.apache.org/usermanual/remote-test.html#tips

client.rmi.localport を使ってポート番号固定化することは多々あると思います。
ただ、使われるポートは、3つのポートが最大使われます。 (この例だと20001~20003 )
これがあまり書かれている記事がなくてハマります…。

動機

どうしてJMeter+Dockerで動かそうとしたのかという話です。

弊社でもJMeter,Gatling,WRK,Vegentaなど色々なストレスツールを使っています。
古いものだと、JMeterでストレステスト用のシナリオが存在します。
Gatlingなど、別のツールでまた書くのがめんどくさい。でも、JMeterの実行環境がそもそも存在しない。そしてとある事情により、サーバーは別部署が担当しており、Javaのインストールを依頼するのがめんどくさい。

Dockerでサクっと動かしたいというのが動機です。

「あれ?これ前もやってはまったな・・・」
となったので自分のためにも記録しておきました。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?