狂自私

导航

emqx性能测试

emqtt-bench

emqtt-bench-0.4.34-el7-amd64.tar 是性能测试工具,去官网下载就行
它需要openssl-1.1.1。
在centos7上,openssl默认是1.0.0版本,所以需要安装,如果有好的仓库,可以直接安装:
yum install openssl openssl-devel
如果没有,就需要编译:
1、下载
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1.tar.gz
2、解压并切换目录
tar -zxvf openssl-1.1.1.tar.gz
cd openssl-1.1.1
3、设定Openssl 安装,( --prefix )参数为欲安装之目录,也就是安装后的档案会出现在该目录下
./config --prefix=/usr/local/openssl
4、执行命令
./config -t
5、执行make、make install,编译Openssl
make 
P.S. 若CentOS7中没有GCC编译器,执行命令 yum -y install gcc
6、安装
sudo make install
7、切换openssl版本
#这里要看自己的情况,如果原本就没有openssl 1.0.0,那就不需要做这一步
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl

echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v

ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
 
8、验证
[root@ck-ssd openssl-1.1.1]# openssl version
OpenSSL 1.1.1  11 Sep 2018
[root@ck-ssd openssl-1.1.1]#

可能遇到的问题:其实就是openssl的问题

我使用emqtt_bench对emqx4.2做性能测试,但是启动emqtt_bench的时候有报错:
[root@ck-ssd bin]# ./emqtt_bench conn -c 50000 -i 10
=ERROR REPORT==== 12-Apr-2025::00:07:36.224823 ===
Unable to load crypto library. Failed with error:
"load_failed, Failed to load NIF library /root/emqtt-bench/lib/crypto-5.4.2.1/priv/lib/crypto: 'libcrypto.so.1.1: cannot open shared object file: No such file or directory'"
OpenSSL might not be installed on this system.


=WARNING REPORT==== 12-Apr-2025::00:07:36.289058 ===
The on_load function for module crypto returned:
{error,{load_failed,"Failed to load NIF library /root/emqtt-bench/lib/crypto-5.4.2.1/priv/lib/crypto: 'libcrypto.so.1.1: cannot open shared object file: No such file or directory'"}}


=ERROR REPORT==== 12-Apr-2025::00:07:37.677022 ===
Unable to load crypto library. Failed with error:
"load_failed, Failed to load NIF library /root/emqtt-bench/lib/crypto-5.4.2.1/priv/lib/crypto: 'libcrypto.so.1.1: cannot open shared object file: No such file or directory'"
OpenSSL might not be installed on this system.


=WARNING REPORT==== 12-Apr-2025::00:07:37.701846 ===
The on_load function for module crypto returned:
{error,{load_failed,"Failed to load NIF library /root/emqtt-bench/lib/crypto-5.4.2.1/priv/lib/crypto: 'libcrypto.so.1.1: cannot open shared object file: No such file or directory'"}}
这就是openssl版本的问题;但是好像也可以直接忽略,毕竟没有启用ssl
 
具体的可以参考《I:\BaiduSyncdisk\学习\EMQX\EMQX文档-4.2.docx》中的#性能测试章节
 

执行性能测试

1. 关于系统调优/网卡配置什么的请参考官方文档:系统调优典型压测场景
2. 消息发送测试
生产者测试
#pub 发送消息
#这里模拟了5万个客户端发送消息
#topic要注意,消费端和发送端要对应
#-I表示消息发送间隔,单位是毫秒
#-s表示size,单位为字节,16384表示16kB
[aduser@file-001 bin]$ date ; ./emqtt_bench pub -h 127.0.0.1 -p 11883 -c 50000 -t t/1  -I 1000 -q 0 -s 16348
Mon Apr 14 17:36:11 CST 2025
Start with 144 workers, addrs pool size: 1 and req interval: 1440 ms 

1s pub total=144 rate=142.86/sec
1s connect_succ total=144 rate=142.86/sec
2s pub total=432 rate=288.00/sec
2s connect_succ total=288 rate=144.00/sec
3s pub total=864 rate=432.00/sec
3s connect_succ total=432 rate=144.00/sec
4s pub total=1296 rate=432.00/sec
5s pub total=1872 rate=576.00/sec
5s connect_succ total=576 rate=72.00/sec
6s pub total=2592 rate=720.00/sec
6s connect_succ total=720 rate=144.00/sec
7s pub total=3312 rate=720.00/sec
8s pub total=4176 rate=864.00/sec
8s connect_succ total=864 rate=72.00/sec
9s pub total=5184 rate=1008.00/sec
9s connect_succ total=1008 rate=144.00/sec

#pub表示发送消息,total表示总量,rate表示每秒消息数
#connect_succ表示客户端创建的情况,total表示当前客户端总量,rate表示每秒创建了多少个客户端,一般是CPU核心数。当total等于指定数量之后,不会在输出这个信息。

3. 消息订阅消费测试

#sub:订阅消息并接收消息
#    -h和-p就是地址和端口
#    -t是--topic的简写,t表示topic名,可以自定义
#    -c是客户端数量
#整体就是模拟50个消费端消费emqx的消息,消费者应该先启动,然后再启动生产者,避免一开始就接收到过多的消息导致消费端下线。
[aduser@file-001 bin]$ date ; ./emqtt_bench sub -h 127.0.0.1 -p 11883 -t t -c 50
Mon Apr 14 17:02:42 CST 2025
Start with 50 workers, addrs pool size: 1 and req interval: 500 ms 

1s sub total=50 rate=49.80/sec
1s connect_succ total=50 rate=49.80/sec
4s recv total=7200 rate=1798.20/sec
6s recv total=21600 rate=7200.00/sec
7s recv total=28800 rate=7200.00/sec
8s recv total=43200 rate=14400.00/sec
#8s:一秒输出一次,8s表示第8次输出
#recv:接收消息
#total:接收消息的总数
#rate:接收消息的速率,这里的单位是:消息数/秒,而不是size/sec

4. 共享订阅

上面的那种模式是非共享订阅,会导致,一份消息被所有消费端消费,这极大的增加了消费端的压力。所以可以使用共享订阅来使得消息只被消费一次。

#$符号在bash中是变量名开头,所以需要将其用单引号括起来。
[aduser@file-001 bin]$ date ; ./emqtt_bench sub -h 127.0.0.1 -p 11883 -t '$share/sbtd/t/1' -c 10
Mon Apr 14 17:27:23 CST 2025
Start with 10 workers, addrs pool size: 1 and req interval: 100 ms 

1s sub total=10 rate=9.98/sec
1s connect_succ total=10 rate=9.98/sec
4s recv total=144 rate=35.98/sec
5s recv total=432 rate=288.00/sec
6s recv total=720 rate=288.00/sec
7s recv total=1152 rate=432.00/sec
8s recv total=1728 rate=576.00/sec
9s recv total=2304 rate=576.00/sec
10s recv total=3024 rate=720.00/sec
11s recv total=3888 rate=864.00/sec
12s recv total=4885 rate=997.00/sec
13s recv total=5900 rate=1015.00/sec
14s recv total=7053 rate=1153.00/sec

 由于我这边硬件有限,emqx服务/生产者/消费者都在同一台物理机上,所以导致结果不很准。

测试结果

经过测试,5万个生产者每秒发送一次16kB的消息,10个消费者消费,包括emqx自身,占用CPU 21.2%(144C),内存29.9%(128GB)。

posted on 2025-04-15 10:14  狂自私  阅读(164)  评论(0)    收藏  举报