一   机器部署

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

系统文件句柄设置  对IO读写要求高的系统

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就不错了。从图中可以看到,不断往上压请求,但是网卡流量已经上不去了

转载于:https://www.cnblogs.com/AmilyWilly/p/8026994.html

RocketMQ性能压测分析(转载)相关推荐

  1. 软件性能测试分析与调优实践之路-JMeter对RPC服务的性能压测分析与调优-手稿节选

    一.JMeter 如何通过自定义Sample来压测RPC服务 RPC(Remote Procedure Call)俗称远程过程调用,是常用的一种高效的服务调用方式,也是性能压测时经常遇到的一种服务调用 ...

  2. tcp压测工具_【解决方案】性能压测及分析调优实践

    [关键导读]结合一次重保活动的性能压测需求,详解了整体的性能测试策略及性能分析思路,并在实施过程中有效利用了网易易测的NPT性能测试平台一站式完成了压测场景设计.执行.业务指标监控.性能指标分析等活动 ...

  3. mysql 性能拐点_性能压测及分析调优实践

    [关键导读] 文中结合一次重保活动的性能压测需求,详解了整体的性能测试策略及性能分析思路,并在实施过程中有效利用了NPT性能测试平台完成了压测场景设计.执行.业务指标监控.性能指标分析,结合监控找出了 ...

  4. Nginx 性能压测和分析优化

    服务端高并发系统离不开负载均衡,大中型公司下,负载均衡代理层都是有专人进行独立开发和建设的,那么作为负载均衡代理层的首选方案 Nginx,我们该如何进行压力测试.如何优化分析.如何用最少的机器承受最大 ...

  5. 后端服务性能压测实践

    转自:https://mp.weixin.qq.com/s/XW9geHZ9odHdI7srDiKBIg 目录 背景 环境检测 压力机及压力工具检测 Linux openfiles limit 设置 ...

  6. 性能压测工具选型对比

    本文是<Performance Test Together>(简称PTT)系列专题分享的第二期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全 ...

  7. HDFS性能压测工具

    转载地址:http://www.taobaotest.com/blogs/2517 引言 Hadoop生态圈的基石有两个,一个是HDFS文件系统,一个是MR编程框架.第一弹中提到应用MR编程框架实现大 ...

  8. 性能压测中的SLA,你知道吗?

    本文是<Performance Test Together>(简称PTT)系列专题分享的第6期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全 ...

  9. 性能压测诡异的Requests/second 响应刺尖问题

    最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码.debug.fixbug都逐渐收尾,进入上线前的性能压测. 虽然不是大促前的性能压测要求,但是为了安全起见,需要摸个底心里有个数 ...

最新文章

  1. 怎样在bug管理上节省时间
  2. SPFA算法O(kE)
  3. 状态同步与帧同步的简介
  4. Coursera课程Python for everyone:Quiz: Networks and Sockets
  5. 架构漫谈(1):什么是架构
  6. matlab loopcount,求助一个数值积分问题,用matlab的quadgk函数来计算,谢谢!
  7. 手把手教你做挖矿应急响应
  8. 在高科技产业当中,有时候你的产品出现了问题,你反过来可以把这个问题称为你的特点...
  9. *【计蒜客 - 蓝桥训练】人以群分(二分 + dp)
  10. 2.9 穆尔彭罗斯伪逆
  11. Stack应用 - 数学表达式(Balanced parentheses)括号完全匹配
  12. Netty工作笔记0053---Netty核心模块梳理
  13. Sybase Adaptive Server Anywhere ISQL 8.0 绿色汉化版发布
  14. php怎么创建两条折线图,excel折线图怎么做两条
  15. 「leetcode」C++题解:239. 滑动窗口最大值,单调队列的经典题目
  16. C语言分数加减乘除化简操作集(含测试源码)
  17. 修改android 工程图标,AndroidStudio替换项目图标ic_launcher操作
  18. android身高控件_Android 滑动选择身高体重控件——RulerView
  19. WordPress建站主机推荐
  20. 计算机英语os的全称,os是什么意思

热门文章

  1. [转] CMake入门
  2. [攻防世界 pwn]——forgot
  3. jmeter 取json值_Jmeter入门13 后置处理器JSON Extractor提取json的多个值
  4. Spring Web Service 学习之Hello World篇
  5. 如何使用java synchronized进行线程同步 .
  6. Linux从入门到精通——磁盘与目录的容量(du、df)
  7. ubuntu下 mysql安装以后无法登陆的的解决方法((ERROR 1698 (28000): Access denied for user 'root'@'localhost'))...
  8. ubuntu12.04.5安装openssh-server所引发的血案
  9. Asp.Net Web API 2第七课——Web API异常处理
  10. 熟悉使用ssm框架完成项目