背景:

线上环境,出了一起事故,初步定位是rabbitmq server。

通过抓包发现,是有多个应用使用同一台rabbitmq server。并且多个应用使用rabbitmq的方式也不一样。发现有以下两种方式:

1. 每次produce 一条消息,开闭channel一次

2. 每次produce 一条消息,开闭connection一次,开闭channel一次。

这种使用方法是我们怀疑的一个点,除此之外还有怀疑的点有:

1. rabbitmq cluster的配置问题

2. rabbitmq server的硬件问题(体现在磁盘的io_wait 升高,tcp连接数的上升)

3. rabbitmq 本身的问题?

4. 网络抖动和网络延迟?

因为可能性比较多,所以,做一次全面的评估和定位还是有必要的。

有些任务交给IT和运维去追踪了。我这边主要负责一下客户端使用方式的评估

目标:

1. 确认使用两种使用方法(见上文),是否会造成瓶颈?

2. 确认两种使用方法,在什么情况下会出问题?是否会百分百可以重现?

从理论上,rabbitmq文档,以及抓包数据来说:每条消息开关一次connection 必然是效率最低的。

试想一下,每条消息体,需要建立和关闭一条tcp连接,中间还要掺杂着AMQP的控制报文,多么的浪费资源!!!!

简单的测评结果如下:

 
方法描述 高峰消息量 参数 备注
共用一个connection,每条消息开关一次channel。 2000msg/s 1个线程,无消费者 使用本机Rabbitmq,本地java client
每条消息开关一次connection 200msg/s 1个线程,无消费者 使用本机Rabbitmq,本地java client

上面这个结果是一个简单的测试结果。

在尝试混合使用两种模式访问本地rabbitmq的时候,出现了一下问题。问题也很奇怪,有一个方法的进程启动后,另外一种就会SocketTimeout。

后面只好在测试环境找了台Rabbitmq Server。

然后google了一把,原来有个jmeter-rabbitmq-plugin。太帅了。功能不全是自己要的,没关系,改呗。代码参见:https://github.com/lykm02/JMeter-Rabbit-AMQP 。(我更新了maven build 方式和一些jar version信息,在branch support_maven_xx 上)

放到jmeter中,就可以使用jmeter来压了。

结论是:确实connection的使用方式 会影响到rabbitmq的内部,从而导致其他连接到同一rabbitmq的连接收到影响。

具体工作原理,因为涉及到rabbitmq的源码,目前没有深入研究。

Rabbitmq 性能测试的更多相关文章

  1. ActiveMQ;RabbitMQ;ZeroMQ

    中间件类型: Embedded middleware: As the name suggests, this typeof middleware handles embedded applicatio ...

  2. rabbitmq之队列性能测试及优化方法(六)

    前言 下面关注一下rabbitmq实际使用时的性能问题和怎么进行一些优化. 性能测试 针对每个需要生产/消费者与rabbitmq进行通讯的方法进行测试 测试环境 排除网络IO的干扰,采用生产者和消费者 ...

  3. (十二)RabbitMQ消息队列-性能测试

    原文:(十二)RabbitMQ消息队列-性能测试 硬件配置 宿主机用的联想3850X6的服务器四颗E7-4850v3的处理器,DDR4内存,两块1.25TB的pcie固态.在宿主机上使用的事esxi5 ...

  4. RabbitMQ消息队列(十二)-性能测试

    硬件配置 宿主机用的联想3850X6的服务器四颗E7-4850v3的处理器,DDR4内存,两块1.25TB的pcie固态.在宿主机上使用的事esxi5.5的虚拟化平台,在子系统中安装RabbitMQ和 ...

  5. RabbitMQ Performance Testing Tool 性能测试工具

    RabbitMQ Performance Testing Tool 介绍:https://www.rabbitmq.com/java-tools.html RabbitMQ Performance T ...

  6. RabbitMQ功能测试+性能测试简单方法

    一.如何测试RabbitMQ的功能 1.联系开发找到队列的名称:登录MQ后台管理地址;点击Queues页,输入队列名搜索出目标队列(支持模糊查询) 2.准备测试数据 (1)已知json格式时,根据不同 ...

  7. rabbitmq 和 kafka 简单的性能测试

    测试环境:ubuntu 15.10 64位 cpu:inter core i7-4790 3.60GHZ * 8 内存:16GB 硬盘:ssd 120GB 软件环境:rabbmitmq 3.6.0   ...

  8. jmeter录制rabbitmq消息-性能测试

     一.目的 为了测试系统的稳定性,在UAT环境下,通一段时间内不间断发送MQ消息来验证系统是否会出现异常. 二.测试工具 使用测试工具:jmeter5.2.1,火狐浏览器71.0,RabbitMQ管理 ...

  9. 缓存、队列(Memcached、redis、RabbitMQ)

    本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...

随机推荐

  1. JavaScript Window.document对象

    一.找到元素: docunment.getElementById("id"):根据id找,最多找一个:    var a =docunment.getElementById(&qu ...

  2. java的位运算符

    1.与运算&,同为1为1,否则为0: 例如:10001(二进制)&10000(二进制)=10000(二进制) 2.或运算|,只要有1就是1: 例如:10001(二进制)&100 ...

  3. Ubuntu 14.04 64bit 系统下打开PHPadmin时出现缺少mysqli|mysql 扩展的解决方法(php5)

    网上找了很多方法,都是翻来覆去的抄袭. 都在说把 /etc/php5/apache2/php.ini 下面的  ;extension=php_mysqli.dll  前面的 ; 注释符号去掉 再重启 ...

  4. linux python3.5.0安装并替代centos自带的python

    CentOS自带2.7.3版本的Python,旧版本无法及时支持新功能,所以要安装更高版本的Python3.5.0. 1.下载#wget https://www.python.org/ftp/pyth ...

  5. Vue2.0源码阅读笔记--生命周期

    一.Vue2.0的生命周期 Vue2.0的整个生命周期有八个:分别是 1.beforeCreate,2.created,3.beforeMount,4.mounted,5.beforeUpdate,6 ...

  6. jQuery动态生成不规则表格前后端

    一.需求:有这么一张表 前四个属性当作联合主键 需要把该表所有的行在前端以表格形式显示出来,要求activityId相同时合并成一行,activityCode相同时,合并一行,activityVers ...

  7. centos 把网卡名称修改为 eth0

    默认网卡名称是 eno16777736 1.修改配置文件 ifcfg-eno16777736 [root@localhost ~]# cd /etc/sysconfig/network-scripts ...

  8. Hadoop学习笔记:使用Mrjob框架编写MapReduce

    1.mrjob介绍 一个通过mapreduce编程接口(streamming)扩展出来的Python编程框架. 2.安装方法 pip install mrjob,略.初学,叙述的可能不是很细致,可以加 ...

  9. iOS开发学习路径的一些建议

    结合自己情况聊下iOS学习建议,这里不讲大道理,说说具体怎么做.欢迎大家拍砖. 1.第一点要求 ,能比较顺畅的阅读官方的文档 如果你连官方的文档读起来都非常困难,那你还谈什么提高和进阶,咱们学习iOS ...

  10. [Hadoop] - Protocol Buffer安装

    Hadoop从2.x版本开始,底层的RPC远程调用使用ProtocolBuffer格式来传递数据,所以在编译Hadoop的过程中有可能出现提示缺少Protocol服务的异常信息,类似:'protoc ...