apache jmeter是由apache组织开发的基于java的压力测试工具,用于对软件进行压力测试。它最初设计用于web应用测试,但后来扩展到其他测试领域。
JMeter是一款图形化软件,用户设置好测试计划后执行,即可测试服务器。
由于我的阿里云不支持图形化操作,因此我在Linux和本地Windows上分别安装了JMeter:首先在自己的电脑上设置好测试计划,然后上传到阿里云服务器上运行。
JMeter安装步骤
参考:JMeter测试EMQ集群:https://www.php.cn/link/1d10c65b774172bd62b8b1dae15b8fd8
(JMeter是用Java编写的,因此安装JMeter前需要确保JDK是最新的,我的JDK版本是1.8)
从官网下载二进制文件压缩包(不要下载源代码):https://www.php.cn/link/c40b0a7144f196988c2d5d13fa8ca93a
注:关于binary和source,tgz和zip的区别:https://www.php.cn/link/45c2d3411b9139f5c37b5041aad1ff9b
实际上,Windows可以解压tgz文件,Linux也可以解压zip文件。使用相同类型的压缩包即可。
在Windows上安装JMeter
建议对Windows熟练的用户(大多数人应该对Windows操作比较熟练)先安装Windows版本。安装完成后,Linux端可以重复相同的步骤。
解压apache-jmeter-5.1.1.tgz
下载JMeter中支持MQTT的插件
JMeter原生不支持测试MQTT,因此需要添加相关的插件jar包。
在 GitHub – emqx/mqtt-jmeter: MQTT JMeter Plugin:https://www.php.cn/link/a4b9f0e707aed5a52241d458a2910705。
尝试运行bin/jmeter.bat,看是否能正常打开。
JMeter.bat的位置如图所示:

如果能正常打开并显示图形界面,则安装成功。
注:我看到一些两三年前的博客提到,需要将JMeter添加到系统环境变量中,但我没有这样做也能正常使用,现在应该不需要更改环境变量了。
在Linux上安装JMeter
解压apache-jmeter-5.1.1.tgz
注意,tgz格式的压缩包不能使用unzip命令。使用tar zxvf apache-jmeter-5.1.1.tgz -C ./命令解压到当前目录。
同Windows下安装的第二步
为了方便,直接将本地Windows的lib/ext目录下的mqtt-xmeter-1.0.1-jar-with-dependencies.jar上传到Linux端的lib/ext目录即可。
配置环境变量
使用vim编辑/etc/profile文件:
增加以下内容:
export PATH=/root/apache-jmeter-5.1.1/bin:$PATH
如图所示:

修改时要小心,PATH写错后补救会很麻烦。
修改完成后,别忘了执行source /etc/profile。
JMeter的安装到此就完成了。(比emqtt_benchmark简单多了)
添加测试计划
打开Windows的JMeter.bat,设置一个测试计划。
添加线程组

添加MQTT connect测试

相关设置
number of threads(线程数):我设置了50000。因为看到有博客说“1G内存对应6W设备连接”。
白瓜面试
白瓜面试 – AI面试助手,辅助笔试面试神器
40 查看详情
但最后我的线程数只达到了1万多(阿里云轻量服务器,1核CPU,2GB内存)。


Server name or IP:指向被测MQTT服务器地址。我不太明白为什么127.0.0.1也可以用。
Port number:TCP连接的端口是1883;SSL连接:8883。
MQTT version:EMQ X官网说支持V3.1/V3.1.1。所以这里选择3.1或3.1.1都可以。
后面那个user name和password填写登录emqx dashboard的用户名和密码。
ClientId prefix:标识客户端的固定前缀,每个连接(虚拟用户)再添加一个uuid串,整个作为客户标识。
Keep alive(s):心跳信号发送间隔。例如,300表示客户端每隔300秒向服务器发出ping请求,以保持连接活跃。
Connection keep time(s):连接建立后,保持该连接的时长。例如,1800表示1800秒之后连接将被关闭,即使一直发送心跳信号。
Connect attempt max:第一次连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。
Reconnect attempt max:后继连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。
设置完成后,保存为jmx格式。
运行测试计划
jmeter -n -t /root/apache-jmeter-5.1.1/bin/test.jmx
我最开始遇到了这样的错误:
Unable to get local host IP address.; nested exception is:
java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known
解决方法:
vim /etc/hosts
添加你的IP地址以及刚刚报错信息中提到的用户名
例如 123.456.789 iZwz95j86y235aroi85ht0Z
然后就可以运行了。
运行时可以打开dashboard查看,可以看到连接的client数量在快速增加。
如图所示,可以看到连接的峰值为11581,内存为340M。这个内存似乎是emq的节点根据当前的线程数分配的,线程增多,分配的内存(图中的total)会相应增加(不过,免费版emqx的内存是有上限的)。
但我不太明白那个(used/available)的值,为何是19111。

可以看到这个clientid和我们在测试计划中设置的一样。这些client都是测试产生的。

星云测试
https://www.php.cn/link/add899414cf1cb01b7c3316db9310a09
奇林软件
https://www.php.cn/link/3e59327f1a6ccf540d9878cf8c991278
联合通测
https://www.php.cn/link/8e3460e10028fee7cad4702caf594d18
以上就是用JMeter测试emqx服务器性能的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/248959.html
微信扫一扫
支付宝扫一扫