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
