一、应该如何压测

对RocketMQ的压测不能只关注RocketMQ的TPS,如果TPS达到峰值的同时,服务器的资源负载,比如CPU负载、内存使用率、磁盘IO负载、JVM GC频率以及网络流量负载都非常高,那么其实这个RocketMQ的TPS并不是最合适的峰值,因为有可能会导致服务器宕机,因此我们在压测的过程中主要是寻找一个最合适的TPS,也就是在服务器资源负载都在合理的范围内。

二、实际压测过程

1、服务器准备
VMWare虚拟机:1核CPU、2GB内存、20GB硬盘

2、部署RocketMQ
NameServer内存配置:-Xms128m -Xmx256m -Xmn128m
Broker内存配置:-Xms128m -Xmx512m -Xmn128m

3、通过dledger的方式启动RocketMQ
启动方式:sh bin/dledger/fast-try.sh start
查看集群情况:sh bin/mqadmin clusterList -n 127.0.0.1:9876
mq11

4、执行压测
(1)Producer:1台机器,80个线程不断发送消息,消息大小:500KB
(2)Consumer:1台机器,两个消费者同时消费。

5、RocketMQ TPS
通过rocketmq-dashboard管理控制台可以看到RocketMQ的TPS,如下图,可以看出消息的生产和消费TPS在1900左右。
mq12

注:rocketmq-dashboard部署运营的步骤如下:
(1)上传jar:rocketmq-dashboard-1.0.1-SNAPSHOT.jar
(2)运行:java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar --server.port=8080 --rocketmq.config.namesrvAddr=127.0.0.1:9876 > rocketmq-dashboard.log &
(3)访问端口默认为8080

6、服务器CPU负载
通过top命令查看服务器CPU负载情况,当前服务器是1核CPU,load average: 11.75, 12.70, 12.11,表示当前CPU在1分钟、5分钟和15分钟内的平均负载,已经超过1,表示CPU负载过高。
mq13

7、服务器内存使用率
通过free -h命令查看服务器当前内部使用情况,如下图所示,当前服务器内存基本耗完。
mq14

8、查看JVM GC频率
(1)通过 sh bin/mqadmin clusterList -n 127.0.0.1:9876 命令查看rocketmq集群情况,找到master broker的端口:30911
(2)通过lsof -i:30911 命令查看占用端口的进程
(3)找到进程号pic之后,通过jstat -gc 2480命令查看JVM GC情况,如下图所示,jstat显示的数据中 FGC项为0,表示没有发生full GC。
mq15

9、查看磁盘IO负载
通过top命令,查看磁盘IO负载情况,如下图所示,找到类似下面的数据:
%Cpu(s): 35.9 us, 57.9 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 6.2 si, 0.0 st
这里的0.0wa表示磁盘IO等待CPU执行时间中的百分比,如果比例太高说明CPU执行的时候大部分时间都在等待执行IO,进而说明IO负载很高,导致大量IO等待。
mq16

10、网络流量情况
通过sar -n DEV 1 2命令查看网络流量情况,如下图所示

  • rxpck/s:每秒钟接收的数据包
  • txpck/s:每秒钟发送的数据包
  • rxbyt/s:每秒钟接收的字节数
  • txbyt/s:每秒钟发送的字节数
  • rxcmp/s:每秒钟接收的压缩数据包
  • txcmp/s:每秒钟发送的压缩数据包
  • rxmcst/s:每秒钟接收的多播数据包
    根据实际网卡带宽来判断是否达到峰值。
    mq17

说明:
通过不断调整生产者数量和线程数以及消费者的数量,观察RocketMQ TPS和服务器资源负载的变化,最终得出一个最合适的RocketMQ TPS值,当然这个值跟具体RocketMQ部署的节点数和服务器硬件配置以及消息大小有关。

打赏
支付宝 微信
上一篇 下一篇