RocketMQ性能压测分析(转)
原创文章,转载请注明出处:http://jameswxx.iteye.com/blog/2093785
一 机器部署
1.1 机器组成
1台nameserver
1台broker 异步刷盘
2台producer
1.2 硬件配置
CPU 两颗x86_64cpu,每颗cpu12核,共24核
内存 48G
网卡 千兆网卡
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调度算法
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 评测目的
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是比较安全的值。

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

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

磁盘吞吐量

随着线程数增加,磁盘IOPS大约稳定在5000左右
注意非常重要的细节,即使在高达16000TPS时,磁盘仍然没有发生物理读,这和内存的cached指标是遥相呼应的,文件几乎全部在内存里,没有发生一次物理读,所以文件读的效率非常高,消息消费非常快



RocketMQ性能压测分析(转)的更多相关文章
- RocketMQ性能压测分析(转载)
一 机器部署 1.1 机器组成 1台nameserver 1台broker 异步刷盘 2台producer 2台consumer 1.2 硬件配置 CPU 两颗x86_64cpu,每颗 ...
- 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选
一.JMeter 如何通过自定义Sample来压测RPC服务 RPC(Remote Procedure Call)俗称远程过程调用,是常用的一种高效的服务调用方式,也是性能压测时经常遇到的一种服务调用 ...
- 【原】Nginx添加Content-MD5头部压测分析
如需转载,必须注明原文地址,请尊重作者劳动成果. http://www.cnblogs.com/lyongerr/p/5048464.html 本文介绍了webbenck安装,但是最后使用的是ab工具 ...
- 性能压测诡异的Requests/second 响应刺尖问题
最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码.debug.fixbug都逐渐收尾,进入上线前的性能压测. 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数 ...
- 性能压测中的SLA,你知道吗?
本文是<Performance Test Together>(简称PTT)系列专题分享的第6期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全 ...
- 并发模式与 RPS 模式之争,性能压测领域的星球大战
本文是<如何做好性能压测>系列专题分享的第四期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论 ...
- jmeter系列-如何实现像loadrunner一样,多个并发用户先通过登录初始化,然后做并发的接口性能压测
自动转开发后,就很少关注性能测试方面的东西,最近在帮朋友做一个性能压测,由于朋友那边的公司比较小,环境比较简单,而且是对http服务进行的压测,所以最终 选用了jmeter来实现这个压测. 如下就是我 ...
- 性能压测,SQL查询异常
早上测试对性能压测,发现取sequence服务大量超时报错,查询线上的监控SQL: 大量这个查询,我在DeviceID和Isdelete上建有复合索引,应该很快,而且我测试了一下,取值,执行效率很高, ...
- jmeter性能压测瓶颈排查-网络带宽
问题: 有一台机器做性能压测的时候,无论开多少个线程,QPS一直压不上去,而服务器和数据库的性能指标(主要是CPU和内存)一直维持在很低的水平. 希望帮忙排查一下原因. 过去看了下进行压测的接口代码, ...
随机推荐
- AOP相关
静态代理.动态代理与AOP: 简单易懂:http://blog.csdn.net/hejingyuan6/article/details/36203505 补充:http://layznet.itey ...
- Android6.0获取运行时权限
照着<第一行代码>打代码,然并卵,感叹技术进步的神速.最后提醒一点:IT类的书籍一定要注意出版时间!出版时间!出版时间!重要的事情说三遍 问题出在android6.0的权限获取问题上,以前 ...
- win上配置nginx
win上配置nginx 网上配置nginx的教程大多都是linux上的,今天贴出来nginx在win上的配置,在此篇配置中,nginx代理了Tomcat以及node服务.配置如下: 注意:根据实际经验 ...
- 洛谷 P1068 分数线划定【结构体排序】
题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据计划录取人数的150%划 ...
- 蒟蒻的9个背包的浩大工程(更新中)(无限延期)(太长了不舍删虽然写的lj的一匹)
所以说这就是一篇写炸的废文!!!! 所以说背包直接看dd大神的就好了,算了瞎写写吧. 0/1背包 有n件物品和一个容量为C的背包.第i件物品的重量是w[i],价值是v[i].求解将哪些物品放入背包可使 ...
- java中的3大特性之继承
继承的特点:继承父类的属性和方法.单继承(多层继承)c++里的继承是多继承 特性 :方法的复写(重写) java中的继承和OC中一样. 比如:人可以养狗; 人---->狗 :整体和部分(拥有)关 ...
- CodeChef - UASEQ Chef and sequence
Read problems statements in Mandarin Chinese and Russian. You are given an array that consists of n ...
- Exercise03_12
import java.util.Scanner; public class Palindrome { public static void main(String[] args){ int a; S ...
- IO流--字符流缓冲技术
缓冲技术是为了提高数据的读写效率而提出的. (1)字符流的缓冲读 在字符流的缓冲技术中提供了一个newLine()方法,这个方法是跨平台的 在读数据的时候采用读完直接刷新的方式可以保证断电后数据不会丢 ...
- linux下查看端口占用情况以及服务启动的目录
1.先介绍几个命令: 1. lsof -i:80 查看80端口的占用情况 命令返回结果: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ngin ...