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。
JMeter.bat的位置如图所示:

如果能正常打开并显示图形界面,则安装成功。
注:我看到一些两三年前的博客提到,需要将JMeter添加到系统环境变量中,但我没有这样做也能正常使用,现在应该不需要更改环境变量了。
在Linux上安装JMeter
注意,tgz格式的压缩包不能使用unzip命令。使用tar zxvf apache-jmeter-5.1.1.tgz -C ./命令解压到当前目录。
为了方便,直接将本地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,设置一个测试计划。


number of threads(线程数):我设置了50000。因为看到有博客说“1G内存对应6W设备连接”。
防封域名方法千千种,我们只做最简单且有用的这一种。微信域名防封是指通过技术手段来实现预付措施,一切说自己完全可以防封的那都是不可能的,一切说什么免死域名不会死的那也是吹牛逼的。我们正在做的是让我们的推广域名寿命更长一点,成本更低一点,效果更好一点。本源码采用 ASP+ACCESS 搭建,由于要用到二级域名,所以需要使用独享云虚机或者云服务器,不支持虚拟主机使用,不支持本地测试。目前这是免费测试版,
0
但最后我的线程数只达到了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的用户名和密码。
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
例如 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服务器性能的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号