Rabbitmq 性能测试

背景:

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

经过抓包发现,是有多个应用使用同一台rabbitmq server。而且多个应用使用rabbitmq的方式也不同。发现有如下两种方式:git

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

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

这种使用方法是咱们怀疑的一个点,除此以外还有怀疑的点有:运维

1. rabbitmq cluster的配置问题maven

2. rabbitmq server的硬件问题(体如今磁盘的io_wait 升高,tcp链接数的上升)tcp

3. rabbitmq 自己的问题?测试

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

 

由于可能性比较多,因此,作一次全面的评估和定位仍是有必要的。google

有些任务交给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的源码,目前没有深刻研究。

相关文章
相关标签/搜索