`
jameswxx
  • 浏览: 776975 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

RocketMQ性能压测分析

 
阅读更多

原创文章,转载请注明出处:http://jameswxx.iteye.com/blog/2093785

 

一   机器部署

1.1  机器组成

1台nameserver

1台broker  异步刷盘

2台producer

2台consumer
 

1.2  硬件配置

CPU  两颗x86_64cpu,每颗cpu12核,共24核

内存 48G

网卡 千兆网卡

磁盘 除broker机器的磁盘是RAID10,共1.1T,其他都是普通磁盘约500G
 

1.3  部署结构

橙色箭头为数据流向,黑色连接线为网络连接
 
 

1.4  内核参数

broker是一个存储型的系统,针对磁盘读写有自己的刷盘策略,大量使用文件内存映射,文件句柄和内存消耗量都比较巨大。因此,系统的默认设置并不能使RocketMQ发挥很好的性能,需要对系统的pagecache,内存分配,I/O调度,文件句柄限制做一些针对性的参数设置。

 

系统I/O和虚拟内存设置

echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf

echo 'vm.min_free_kbytes=5000000' >> /etc/sysctl.conf

echo 'vm.drop_caches=1' >> /etc/sysctl.conf

echo 'vm.zone_reclaim_mode=0' >> /etc/sysctl.conf

echo 'vm.max_map_count=655360' >> /etc/sysctl.conf

echo 'vm.dirty_background_ratio=50' >> /etc/sysctl.conf

echo 'vm.dirty_ratio=50' >> /etc/sysctl.conf

echo 'vm.page-cluster=3' >> /etc/sysctl.conf

echo 'vm.dirty_writeback_centisecs=360000' >> /etc/sysctl.conf

echo 'vm.swappiness=10' >> /etc/sysctl.conf

 

系统文件句柄设置

echo 'ulimit -n 1000000' >> /etc/profile

echo 'admin hard nofile 1000000' >> /etc/security/limits.conf

 

系统I/O调度算法

deadline
 

1.5 JVM参数

采用RocketMQ默认设置

 -server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:+DisableExplicitGC -verbose:gc -Xloggc:/root/rocketmq_gc.log -XX:+PrintGCDetails -XX:-OmitStackTraceInFastThrow 

 

二   性能评测

2.1  评测目的

压测单机TPS,评估单机容量
 

2.2  评测指标

最高的TPS不代表最适合的TPS,必须在TPS和系统资源各项指标之间取得一个权衡,系统资源快达到极限,但尚能正常运转,此时的TPS是比较合适的。比如ioutil最好不要超过75%,cpu load最好不超过总的核数或者太多,没有发生频繁的swap导致较大的内存颠簸。所以不能只关注TPS,同时要关注以下指标:

消息:TPS

cpu:load,sy,us

内存:useed,free,swap,cache,buffer

I/O:iops,ioutil,吞吐量(数据物理读写大小/秒)

网络:网卡流量

 

2.3  评测方式

两台producer起等量线程,不间断的向broker发送大小为2K的消息,2K消息意味着1000个字符,这个消息算比较大了,完全可以满足业务需要。

 

2.4  评测结果

TPS比较高

    经过长时间测试和观察,单个borker TPS高达16000,也就是说服务器能每秒处理16000条消息,且消费端及时消费,从服务器存储消息到消费端消费完该消息平均时延约为1.3秒,且该时延不会随着TPS变大而变大,是个比较稳定的值。

 

Broker稳定性较高

    两台producer一共启动44个线程10个小时不停发消息,broker非常稳定,这可简单意味着实际生产环境中可以有几十个producer向单台broker高频次发送消息,但是broker还会保持稳定。在这样比较大的压力下,broker的load最高才到3(24核的cpu),有大量的内存可用。

    而且,连续10几小时测试中,broker的jvm非常平稳,没有发生一次fullgc,新生代GC回收效率非常高,内存没有任何压力,以下是摘自gclog的数据:

2014-07-17T22:43:07.407+0800: 79696.377: [GC2014-07-17T22:43:07.407+0800: 79696.377: [ParNew: 1696113K->18686K(1887488K), 0.1508800 secs] 2120430K->443004K(3984640K), 0.1513730 secs] [Times: user=1.36 sys=0.00, real=0.16 secs] 

新生代大小为2g,回收前内存占用约为1.7g,回收后内存占用17M左右,回收效率非常高。

 

 关于磁盘IO和内存

    平均单个物理IO耗时约为0.06毫秒,IO几乎没有额外等待,因为await和svctm基本相等。整个测试过程,没有发生磁盘物理读,因为文件映射的关系,大量的cached内存将文件内容都缓存了,内存还有非常大的可用空间。

 

系统的性能瓶颈

    TPS到达16000后,再就上不去了,此时千兆网卡的每秒流量约为100M,基本达到极限了,所以网卡是性能瓶颈。不过,系统的IOUTIL最高已经到达40%左右了,这个数字已经不低了,所以即使网络流量增加,但是系统IO指标可能已经不健康了,总体来看,单机16000的TPS是比较安全的值。

 

 

 

以下是各项指标的趋势
TPS
TPS最高可以压倒16000左右,再往上压,TPS有下降趋势
 
CPU

随着线程数增加,最后稳定在3左右,对于总共24核的两颗CPU,这点load根本不算什么

 
内存
内存非常平稳,总量48G,实际可用内存非常高
没有发生swap交换,不会因为频繁访问磁盘导致系统性能颠簸
大量内存被用来作为文件缓存,见cached指标,极大的避免了磁盘物理读
 

磁盘吞吐量

随着线程数增加,磁盘物理IO每秒数据读写大约为70M左右
 
磁盘IOPS
随着线程数增加,磁盘IOPS大约稳定在5000左右
注意非常重要的细节,即使在高达16000TPS时,磁盘仍然没有发生物理读,这和内存的cached指标是遥相呼应的,文件几乎全部在内存里,没有发生一次物理读,所以文件读的效率非常高,消息消费非常快
 
IO百分比
随着线程数增加,IO百分比最后稳定在40%左右,这个数字可以接受
 
网络
系统使用的千兆网卡,理论传输最大值为128M/秒,实际能达到100M就不错了。从图中可以看到,不断往上压请求,但是网卡流量已经上不去了
 
 

 

  • 大小: 190.3 KB
  • 大小: 7.3 KB
  • 大小: 33.6 KB
  • 大小: 12.7 KB
  • 大小: 10.7 KB
  • 大小: 7.2 KB
  • 大小: 9.9 KB
  • 大小: 7.4 KB
分享到:
评论
8 楼 Fanatic357 2019-04-28  
同问,请问这个 曲线 是用什么工具 监测得到的?
7 楼 sunshine_love 2019-03-07  
8核 16G, 单master TPS 4w+,2m-2s-sync TPS 3w+,不管再怎么调,都上不去了
6 楼 107x 2015-02-04  
不错,谢谢!
5 楼 dubinglee 2014-11-27  
请教楼主,您是用什么工具来做压测的?还是自己写测试程序?
4 楼 leisore 2014-11-27  
LZ的系统资源监控是通过什么工具做的?
3 楼 dyfh 2014-10-30  
博主有试过同步刷盘时的性能吗?
2 楼 jameswxx 2014-09-15  
Jacarri_Chan 写道
“CPU  两颗x86_64cpu,每颗cpu12核,共24核
内存 48G”

16000的TPS,真心对不起上面这个配置。


恩,瓶颈在网卡上
1 楼 Jacarri_Chan 2014-09-10  
“CPU  两颗x86_64cpu,每颗cpu12核,共24核
内存 48G”

16000的TPS,真心对不起上面这个配置。

相关推荐

    消息中间件 RocketMQ 性能压测工具

    功能优势: 1 保证绝无 BUG,该工具封装自 RocketMQ 团队的 Benchmark,且经过本人测试。 2 功能强大,覆盖普通消息、定时(延时)消息、事务...适用场景:后端开发同学功能测试或性能测试;测试开发同学进行压力测试。

    jmeter压测RocketMQ的插件

    1、本人项目中要压测RocketMQ,发现网上的有一些源码,但是都不是很全,于是乎自己开发了一个插件,请放到jmeter的lib下的ext下,然后重启jmeter,在java sample中使用

    比RabbitMQ性能更好的消息队列RocketMQ

    比RabbitMQ性能更好的消息队列RocketMQ RabbitMQ 由于持久化场景下的吞吐量只有2.6万 经过 RabbitMQ,Kafka 和 RocketMQ( ActiveMQ 性能较差,暂不考虑)的调研和分析后,我们发现 RocketMQ 比较适合

    Kafka vs RocketMQ—— Topic数量对单机性能的影响1

    在本文中,我们将对比分析Apache Kafka与Apache RocketMQ在处理大量Topic时的性能表现。上一期测试主要关注了三款消息中间件(Kafka、RabbitMQ、RocketMQ)在简单消息发送场景下的性能,而本期则模拟了一个更为实际...

    大型企业级分布式订单项目【技术方案、代码规范、阿里云部署演示和性能压测】

    一步一图,详细介绍项目中22个生产级技术方案设计和代码落地,并对代码落地后的方案,部署到阿里云端环境进行演示和性能压测

    RocketMQ源码分析讲解

    RocketMQ是由阿里巴巴开源的高性能、高可靠、可伸缩的分布式消息中间件。它支持发布/订阅模式,是阿里巴巴集团在使用多年的内部消息系统基础上开发完成并捐赠给Apache软件基金会的顶级项目。以下是从源码角度对...

    RocketMQ源代码解析.pdf

    - 丁威是《RocketMQ技术内幕》的作者,拥有丰富的中间件分析经验,对主流Java中间件如RocketMQ、Dubbo、Kafka等有深刻的见解。 8. **源码分析实践**: - 通过具体的源码分析文章,可以了解到如何深入到RocketMQ ...

    rocketmq实战与源码分析.zip

    2 源码分析篇主要是对RocketMQ4.4.0及其后续版本中的新加入的功能进行源码级别的剖析,主要包括ACL、消息轨迹、多副本。 3 认知篇主要展示笔者阅读源码的经验分享,以及如何以布道师的身份参与Apache顶级开源项目的...

    rocketMq可视化界面

    RocketMQ是一款高性能、分布式的消息中间件,常用于大型分布式系统中的消息传递。RocketMQ提供了丰富的API,支持多种语言,包括Java、Python、Go等。在实际应用中,为了更好地管理和监控RocketMQ的运行状态,一个...

    03-05-26-RocketMQ基本原理分析1

    RocketMQ 是一款由阿里巴巴开源的...RocketMQ因其强大的性能和灵活性,在大规模分布式系统中被广泛使用,尤其是在阿里巴巴等大型互联网公司。理解其设计理念和架构,对于构建高可用、高性能的消息传递系统至关重要。

    RocketMQ基本分析.rar

    2. 高性能:RocketMQ采用批量发送、预写式日志(Write-Ahead Log)和磁盘顺序写入等方式,优化了消息传输的性能。 3. 消息顺序:在特定主题下,通过队列分片策略,可以保证消息的顺序性。 4. 消息回溯:通过时间点...

    rocketmq可视化界面,rocketmq-console

    3. **消费者管理**:查看消费者的订阅关系,监控消费进度,分析消费性能。 4. **消息追踪**:通过轨迹查询功能,定位消息从生产到消费的全链路路径,帮助排查问题。 5. **运维工具**:提供手动刷盘、重启Consumer...

    rocketmq安装包及RocketMQ 控制台JAR包

    RocketMQ 是一款开源的分布式消息中间件,由阿里巴巴开发并贡献给Apache基金会,它主要用于解决大规模分布式系统中的异步...在使用过程中,要熟悉其核心组件、配置参数以及监控工具的使用,以提升系统稳定性和性能。

    rocketmq-console RocketMQ 控制台

    7. **自定义扩展**:RocketMQ Console支持插件机制,用户可以根据需求开发自己的插件,实现更多定制化功能,如对接其他监控系统、增加特定的日志分析等。 总的来说,RocketMQ Console是RocketMQ生态系统中的重要...

    rocketmq-3.4.6源码分析、中文详细注释

    rocketmq-3.4.6源码分析、中文详细注释

    RocketMQ原理分析.rar

    本压缩包“RocketMQ原理分析.rar”包含了对RocketMQ核心机制的深入解析,旨在帮助用户理解其工作原理。 RocketMQ的核心组件包括Producer、Consumer、NameServer和Broker四个部分: 1. **Producer**: 生产者是消息...

    Apache RocketMQ高性能云原生消息队列架构.pdf

    综上所述,Apache RocketMQ的高性能云原生架构不仅确保了消息传递的稳定性和效率,还适应了现代云计算环境的敏捷开发和弹性扩展需求。通过不断的技术创新,RocketMQ已经成为企业级消息系统的首选,为企业构建高可用...

    rocketmq管理工具,项目之前名字rocketmq-console后来项目独立并更名为rocketmq-dashboard

    - 使用Dashboard进行故障排查,结合日志分析问题原因。 6. **社区支持**: 作为阿里巴巴开源项目,RocketMQ Dashboard有活跃的社区支持,用户可以在GitHub上提交问题或参与讨论,获取技术支持和更新信息。 总的...

Global site tag (gtag.js) - Google Analytics