扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要讲解了“单机千万级MQTT消息测试分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“单机千万级MQTT消息测试分析”吧!
成都创新互联专业为企业提供惠济网站建设、惠济做网站、惠济网站设计、惠济网站制作等企业网站建设、网页设计与制作、惠济企业网站模板建站服务,十年惠济做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
| Dell Inc.
型号 PowerEdge R430
CPU 8 CPUs x Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
内存 64 GB ``//测试客户端机器内存升级到96 GB
需要测试千万级连接,确保测试工具独占服务器,并硬件内存大于或等于256GB,由于测试硬件资源受限,以400万连接数据测试结果作为参考依据,单机千万连接完全有可能达到。当商业应用时需要考滤高连接的self-ddos问题,应该尽量设置更长的客户端keepalive值。
服务端系统参数调优(Linux)
修改文件/etc/sysctl.conf
,配置网络参数。
net.ipv4.tcp_wmem = 4096 87380 4161536
net.ipv4.tcp_rmem = 4096 87380 4161536
net.ipv4.tcp_mem = 786432 2097152 3145728
fs.file-max = 12000000 #一千两百万
|
执行/sbin/sysctl -p
即时生效。
echo 12000000 > /proc/sys/fs/nr_open #需root权限
/etc/systemd/system.conf 设置服务最大文件句柄数:
DefaultLimitNOFILE=12000000
修改/etc/security/limits.conf
文件
* hard nofile 12000000
* soft nofile 12000000
* soft nproc 12000000
* hard nproc 12000000
需重启系统生效,服务器操作系统参数调优完成。关于启动CP7服务器端程序请参阅本章中的《程序安装》小节
客户端的参数调优(Linux)
根据TCP/IP协议,由于端口是16位整数,也就只能是0到 65535,而0到1023是预留端口,所以能分配的端口只是1024到65534,也就是64511个。一台机器一个IP只能创建六万多个长连接。 要想达到更多的客户端连接,可以用更多的机器或者网卡,也可以使用虚拟IP来实现,比如下面的命令增加了19个IP地址,其中一个给服务器用,其它18个给client,这样可以产生18 * 60000 = 1080000个连接。本测试用例需要增加到一千万或以上的足够IP。
root@:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3e:0b:2e:a0
inet addr:x.x.x.x Bcast:x.x.x.x Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4706185 errors:0 dropped:0 overruns:0 frame:0
TX packets:4705832 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1005604068 (1.0 GB) TX bytes:5556912863 (5.5 GB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:5875416 errors:0 dropped:0 overruns:0 frame:0
TX packets:5875416 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:3566710813 (3.5 GB) TX bytes:3566710813 (3.5 GB)
以上指令查看到网卡名称为 eth0
ifconfig eth0:0 192.168.77.10 netmask 255.255.255.0 up
ifconfig eth0:1 192.168.77.11 netmask 255.255.255.0 up
ifconfig eth0:2 192.168.77.12 netmask 255.255.255.0 up
ifconfig eth0:3 192.168.77.13 netmask 255.255.255.0 up
ifconfig eth0:4 192.168.77.14 netmask 255.255.255.0 up
ifconfig eth0:5 192.168.77.15 netmask 255.255.255.0 up
ifconfig eth0:6 192.168.77.16 netmask 255.255.255.0 up
ifconfig eth0:7 192.168.77.17 netmask 255.255.255.0 up
ifconfig eth0:8 192.168.77.18 netmask 255.255.255.0 up
ifconfig eth0:9 192.168.77.19 netmask 255.255.255.0 up
以上指令操作增加虚拟IP,添加完成后通过 ifconfig 指令查看确认所有虚拟IP最已列出。
修改/etc/sysctl.conf
文件:
fs.file-max = 12000000
fs.nr_open = 12000000
net.ipv4.ip_local_port_range = 1024 65535
执行/sbin/sysctl -p
即时生效。
echo 12000000 > /proc/sys/fs/nr_open #需root权限
_/etc/security/limits.conf_
配置
* soft nofile 12000000
* hard nofile 12000000
* soft nproc 12000000
* hard nproc 12000000
使用Coolpy7_benchmark测试客户端测试四百万级连接
# 下载测试工具
git clone https:``//github.com/Coolpy7/coolpy7_benchmark.git
# 进入bin文件夹
cd bin
# 启动Coolpy7静连接测试工具
# 参数url: Coolpy7服务端所在服务器ip地址,默认端口号:1883
# 参数workers: 需要创建的客户端连接数量
# 参数cid: mqtt连接客户端(ClientId)前缀,工具会自动以cid+WorkersId作为连接clientid值
# 参数topic: 连接成功后订阅的topic主题(支持以%i取得workersid:例: mytopic%i)不进行订阅测试填写null字符串
# 参数keepalive: 连接ping时间间隔
# 参数clear: mqtt客户端连接的clearsession属性,当设置为true时重连时不能再次订阅qos0以上的主题
# 以下例示建立连接到192.168.200.238所在的Coolpy7服务器端,并创建400万个MQTT客户端连接
./go_build_cp7_bench_sub_go_linux -workers=4000000 -cid=tqy -topic=null -qos=0 -url=tcp:``//192.168.200.238:1883 -keepalive=60000s -clear=true
| 客户端连接数
系统使用内存
RES使用内存
|
VIRT使用内存
|
CPU使用
|
网络(进)
|
网络(出)
| |
100万
|
4.5G
|
2633M
|
2789M
|
260/1600
|
2.8M
|
2M
| |
200万
|
10.3G
|
4009M
|
4152M
|
277/1600
|
2.98M
|
2.15M
| |
300万
|
14.7G
|
5517M
|
5682M
|
278/1600
|
3.05M
|
2.21M
| |
400万
|
19.3G
7055M
7231M
270/1600
2.91M
2.18M
|
测试时需时刻关注服务器端网络资源使用情况,测试数据显示在高连接数下ping/pong状态下已占用极大的网络带宽,需根据当前设备的硬件资源合理设置最大连接数量以保证系统的稳定长期运行
相关测试截图
服务器端启动并host于1883 TCP端口
通过NLOAD工具监测Coolpy7(连接时)网络资源占用情况
使用Coolpy_benchmark工具测试连接400万连接
从服务器端的硬件资源使用情况得出结论单机千万级连接即可实现,如阁下有相关硬件设备实测千万级用例,请把测试结果告知Coolpy7官方。感谢!
测试工具开源地址:https://github.com/Coolpy7/coolpy7_benchmark
工具会以1000为单位打印连接信息
工具启动后会一直创建参数指定的客户端连接数
按应用场景测试
MQTT 是一个设计得非常出色的传输层协议,在移动消息、物联网、车联网、智能硬件甚至能源勘探等领域有着广泛的应用。1个字节报头、2个字节心跳、消息 QoS 支持等设计,非常适合在低带宽、不可靠网络、嵌入式设备上应用。
不同的应用有不同的系统要求,用户使用Coolpy7消息服务器前,可以按自己的应用场景进行测试,而不是简单的连接压力测试:
Android 消息推送: 推送消息广播测试。
移动即时消息应用: 消息收发确认测试。
智能硬件应用: 消息的往返时延测试。
物联网数据采集: 并发连接与吞吐测试。
感谢各位的阅读,以上就是“单机千万级MQTT消息测试分析”的内容了,经过本文的学习后,相信大家对单机千万级MQTT消息测试分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流