LoginSignup
13
13

More than 5 years have passed since last update.

GoでMQTTのベンチマークツールを作ってみた

Last updated at Posted at 2015-04-08

MQTT-Bench : Benchmark tool for MQTT Broker

MQTTクライアントライブラリである、Pahoには、Goのライブラリがあるため、それを利用して、Go言語ベースで、MQTT Brokerに対するベンチマークツールを作ってみました。

MQTT-Bench
https://github.com/takanorig/mqtt-bench

概要

Publish/Subscribeのそれぞれの処理に対して、並列でアクセスして、スループットを測定します。
MQTT3.1.1に対応しています。

Go言語自体の勉強も兼ねて作ってみたものなので、今後も改善していこうと思いますが、ひとまず動作するところまでできたので、公開してみました。
CIなどを利用したビルドなども、継続して実施していく予定です。

インストール

go get を利用して、GitHubからダウンロードした上で、インストールしてください。
インストールが成功していれば、 GOPATH で指定されたパス配下に、インストールされます。

$ go get github.com/takanorig/mqtt-bench
$ go install github.com/takanorig/mqtt-bench

$ cd $GOPATH/bin
$ ls
mqtt-bench

ベンチマーク

Publish

MQTT Broker を起動した状態で、以下のように実行します。

$ mqtt-bench -broker=tcp://192.168.1.100:1883 -action=pub
2015-04-04 12:47:38.690896 +0900 JST Start benchmark
2015-04-04 12:47:38.765896 +0900 JST End benchmark

Result : broker=tcp://192.168.1.100:1883, clients=10, totalCount=1000, duration=72ms, throughput=13888.89messages/sec

デフォルトでは、以下の条件でBrokerに対して、メッセージを送信します。

項目
QoS 0
クライアント数 10
1クライアント当たりの繰り返し回数 100
1メッセージ当たりのサイズ 1024 byte

Subscribe

Subscribeの場合は、事前に、Brokerにメッセージを登録しておく必要があります。
BrokerがRetainに対応していれば、Publishの機能でRetainオプションを指定することにより、メッセージを保持しておくことが可能になります。

(Keep the messages before subscribing)
$ mqtt-bench -broker=tcp://192.168.1.100:1883 -action=pub -retain=true

$ mqtt-bench -broker=tcp://192.168.1.100:1883 -action=sub
2015-04-04 12:50:27.188396 +0900 JST Start benchmark
2015-04-04 12:50:27.477896 +0900 JST End benchmark

Result : broker=tcp://192.168.1.100:1883, clients=10, totalCount=1000, duration=287ms, throughput=3484.32messages/sec

BrokerがRetainに対応していない場合、別サーバから、Publishの処理を行いながら、Subscribeの処理を行ってください。

デフォルトでは、以下の条件でBrokerに対して、メッセージを取得します。

項目
QoS 0
クライアント数 10
1クライアント当たりの繰り返し回数 100

オプション

その他、オプションとしては以下のようなモノがあります。
Brokerや測定したい内容に応じて、指定してください。

Usage of mqtt-bench
  -action="p|pub|publish or s|sub|subscribe"  : Publish or Subscribe (required)
  -broker="tcp://{host}:{port}"               : URI of MQTT broker (required)
  -broker-password=""                         : Password for connecting to the MQTT broker
  -broker-username=""                         : Username for connecting to the MQTT broker
  -qos=0                                      : MQTT QoS(0|1|2)
  -retain=false                               : MQTT Retain
  -topic="/mqtt-bench/benchmark"              : Base topic
  -clients=10                                 : Number of clients
  -count=100                                  : Number of loops per client
  -size=1024                                  : Message size per publish (byte)
  -pretime=3000                               : Pre wait time (ms)
  -intervaltime=0                             : Interval time per message (ms)
  -x=false                                    : Debug mode
13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13