emqx压测时崩溃

EMQX 版本

EMQX 5.3.2

EMQX 安装部署方式

docker部署

EMQX 集群情况

单节点

服务器(运行 EMQX 的机器)硬件配置

14核 32GB,CPU 型号:3th Gen Intel(R) Core™ i5-13600K

服务器操作系统和平台

Cento7.9, amd64

服务端参数优化情况

按照官方文档的性能调优部分配置操作系统和emqx的相关参数

压力机硬件配置

8核 16GB,CPU 型号:Intel(R) Xeon(R) Silver 4210R CPU @ 2.40GHz

压力机使用的测试工具

emqtt-bench

压力机参数优化情况

按照官方文档进行了优化

在 EMQX 中启用的功能

没启动影响性能的功能

测试场景

两台客户端机器,一台发布,一台订阅,配置如上,压测命令如下:
./emqtt_bench pub -c 1000 -i “pub-client-%c” -t “client-%c” -h 10.216.36.118 -I 500 -u admin -P public -m ‘{“forwardDate”:“2024-10-2215:02:08:999”,“metadatas”:{“96500678@electricKwh”:{“quality”:“0x00000000”,“reason”:“Good”},“96500678@electricIc”:{“quality”:“0x00000000”,“reason”:“Good”},“96500678@electricUac”:{“quality”:“0x00000000”,“reason”:“Good”},“96500678@electricUbc”:{“quality”:“0x00000000”,“reason”:“Good”},“96500678@electricIb”:{“quality”:“0x00000000”,“reason”:“Good”},“96500678@electricUab”:{“quality”:“0x00000000”,“reason”:“Good”},“96500678@electricKw”:{“quality”:“0x00000000”,“reason”:“Good”},“96500678@electricIa”:{“quality”:“0x00000000”,“reason”:“Good”}},“points”:{“96500678@electricKwh”:2807174.5,“96500678@electricIc”:41.05189,“96500678@electricUac”:388.7916,“96500678@electricUbc”:389.2592,“96500678@electricIb”:39.427113,“96500678@electricUab”:389.43533,“96500678@electricKw”:-0.21869414,“96500678@electricIa”:39.49932},“receiveItemSize”:8}’

./emqtt_bench sub -c 1000 -i “sub-client-%c” -t “client-%c” -h 10.216.36.118 -u admin -P public

具体问题

压测持续几秒钟后,客户端断连,日志报错如下:
Process: <0.5791.0> on node ‘emqx@172.17.0.2’, Context: maximum heap size reached, Max Heap Size: 6291456, Total Heap Size: 11101570, Kill: true, Error Logger: true, Message Queue Len: 13, GC Info: [{old_heap_block_size,4298223},{heap_block_size,6566731},{mbuf_size,236808},{recent_size,1754767},{stack_size,190},{old_heap_size,0},{heap_size,2984686},{bin_vheap_size,2946376},{bin_vheap_block_size,5708181},{bin_old_vheap_size,0},{bin_old_vheap_block_size,5708181}

emqx容器崩溃退出,崩溃原因日志未显示。
想请教一下该如何排查emqx异常退出的原因

除了这个ip填错了外,没看出哪有问题:joy:

因为这么少的连接数就崩溃了,感觉很奇怪,看系统监控cpu也就百分之50左右,内存占用率更是不到系统的30%,我感觉不进行参数配置优化也不至于2000并发就崩溃呀

仔细看了一下你的命令:
1.如果想指定 clientid,不要用 -i “pub-client-%c”
应该是: --shortids --prefix “pub-client-”
2. 如果你想让pub 出来的消息对应让 sub 接收,不应该用-t “client-%c”
%c 是自己 clientid 的意思,你现在的命令就是发布一条没有任何人订阅的 client-${clientid} 应该不是你想要的效果。
应该用:
-t "client/%i
我用这 2 个命令在 mac 上测试是 ok 的。


docker run -it emqx/emqtt-bench pub -c 1000 --prefix "pub-client" --shortids -t "client/%i" -h "192.168.110.74" -p 2883 -I 500 -u admin -P public -m "test"
docker run -it emqx/emqtt-bench sub -c 1000 --prefix "sub-client" --shortids -t "client/%i" -h "192.168.110.74" -p 2883 -u admin -P public