由于受本地测试环境系统配置、服务器资源、带宽等因素影响,测试结果仅做参考。此次测试主要提供方法思路!
对于结论的分析有错误的地方恳请大家积极反馈,以免误人子弟!
MQTT连接总量测试
测试环境配置说明
环境 | 备注 | 系统 | 配置 |
客户端-1 | 腾讯云服务器-1 | Linux | 4 核 16 GB 10 Mbps |
客户端-2 | 腾讯云服务器-2 | Linux | 4 核 16 GB 10 Mbps |
客户端-3 | 本地电脑 | Windows | i5-7500 8G 实际带宽未知 |
服务端 | 腾讯云服务器-3 | Linux | 4核16G 5Mbps |
测试方法
在三台客户端服务器上分别运行脚本。由于本次测试针对连接总量,对于连接发起时间无有要求。
测试结果说明及分析
- 该项测试仅针对MQTT连接,不涉及其他服务(数据库、业务服务模块等);
- 单台客户端-腾讯云服务器发送TCP连接数上限为6300左右,该项值受限于系统(Linux);
- 本地电脑发送TCP连接数暂未达到上限。上限值取决于系统(Windows),但受制于公司带宽分配问题,目前可发送8000左右连接;
- 单台服务端-腾讯云服务器可接受的TCP受限于根据服务器硬件默认设置的最佳值。目前4核8G服务器默认连接数为65000。受linux系统可发送TCP连接数、本地电脑Windows系统和实际带宽限制,测试时最大仅达到16000个连接;
- 上述测试条件下,服务端CPU、内存、宽带均消耗很少,未达性能瓶颈;
MQTT连接并发连接测试
测试方法
本次测试使用Jmeter对MQTT服务端进行并发压测。
1,下载Jmeter-MQTT测试需要的jar包,下载地址:mqtt-xmeter-1.0.1-jar-with-dependencies.jar
2,将下载的jar文件放到JMeter安装主目录的lib/ext下,重启JMeter,即可看到关于MQTT的取样器。
MQTT Connect:连接操作取样器;
MQTT DisConnect:断开连接操作取样器;
MQTT Pub Sampler:消息发布取样器;
MQTT Sub Sampler:消息订阅取样器;
3,此处仅测试MQTT Connect,设置如下:
- Server name or IP: 指向被测MQTT服务器地址。【注】为灵活起见,属性值都可以引用JMeter的系统或自定义变量。
- Port number: 通常TCP连接的端口时1883, SSL连接则是8883。请参照服务器的具体配置。
- Timeout(s): 连接超时设置,以秒为单位。
- Protocols: 客户端与服务器通过SSL加密通道连接时,可以选择单向或者双向认证(Dual)。双向认证时,您还需要指定相应的信任秘钥库(Trust Key Store), 客户端证书,以及对应的文件保护密码(Secret)。这些文件可以通过服务器的证书配置转化得到。例如,对于EMQ的安装部署,<emqttd_home>/etc/cert下就存放了自签证的CA,服务器及客户端证书,参考下面的命令就可以生成插件所需的.jks, .p12文件,secret自行指定即可。
- User authentication: 如果服务器配置了用户认证,您需要提供相应的用户名和口令。
- ClientId prefix: 标识客户端的固定前缀,每个连接(虚拟用户)再添加一个uuid串,整个作为客户标识。
- Keep alive(s): 心跳信号发送间隔。例如,300表示客户端每隔300秒向服务器发出ping请求,以保持连接活跃。
- Connection keep time(s): 连接建立后,保持该连接的时长。例如,1800表示1800秒之后连接将被关闭,即使一直发送心跳信号。
- Connect attempt max: 第一次连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。
- Reconnect attempt max: 后继连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。
此处关于Jmeter的基本操作不再赘述。
测试结果
线程数 | 耗时 | 失败率 | CPU消耗 | 内存消耗 | 测试次数 |
1000 | 4s | 0.00% | 1%-10% | 可忽略 | 3 |
1300 | 9s | 1.38% | 10%-15% | 可忽略 | 3 |
1500 | 4s | 2.48% | 10%-20% | 可忽略 | 5 |
结果说明及分析
- 仅对连接并发数,不涉及其他服务(数据库、业务服务模块等)条件下,仅消耗CPU,不消耗内存;
- 1000以内的并发数于现有服务器配置(4核16G)性能无影响;
- 超过1000的并发后,由于本地测试环境限制,会出现部分连接失败情况。连接失败率和并发数成正比。失败率增加但CPU消耗远未达上限,证明该连接失败是由测试条件限制造成,仍未达到服务器并发连接数上限;
- 该测试仅说明目前服务器配置支撑1500以内的并发无压力,但并发上限未知;