说明:该测试方案文档旨在提供通用有效的rabbitmq性能测试方案,无论是单点rabbitmq还是rabbitmq集群,所以,这里没有必要提供具体的测试机器、操作系统、应用的信息。所有测试操作都是博主自己查阅官方文档实践操作过的,所以拿出来供大家参考。
一,背景说明
1,测试工具:
rabbitmq-perf-test-2.0.0(官方提供)
2,测试工具需要环境:
jdk-8u151-linux-x64,说明JDK8即可
3,测试工具根目录:
/opt/software/rabbitmq-perf-test-2.0.0
4,工作目录:
/opt/software/rabbitmq-perf-test-2.0.0
5,命令执行示例:
./bin/runjava com.rabbitmq.perf.PerfTestMulti ./publish-consume-spec-persistent-pc1-cc0-simp.js ./publish-consume-spec-persistent-pc1-cc0-simp-result.js
6,测试目的:
获取平均速度或实时速度;
messages平均发布速度(当消费者数量为0的时候才需要计算该值):即最终执行完队列中的消息数量除以60;
messages实时发布速度(当消费者数量为0的时候才需要计算该值):打开management-plugin的WEB界面------>Overview------>Message rates last minute,在测试过程中查看此处的值;
messages实时发布速度(当消费者数量不为0的时候才需要计算该值):打开management-plugin的WEB界面------>Overview------>Message rates last minute,在测试过程中查看此处的值;
7,注意事项:
1,消费者数量为0,只有生产者的测试,每次测试完之后都需要在rabbitmq的management-plugin的web界面把limu01这个queue删除,不然messages会累积占用内存;
2,消费者和生产者数量都不为0的情况下,测试完之后对应的queue就会被消费掉,无需手动删除;
二,具体测试操作
(一)测试指标:no persistent;no confirm;no ack;指定queue名称,共8次,每次执行60s;
一个runjava进程:
1,1个生产者,0个消费者(0个消费者就是no ack了,如果有消费者,默认就是auto ack,auto ack )
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'min-msg-size': 200,
'producer-count': 1,
'consumer-count': 0]}]
2,2个生产者,0个消费者(0个消费者就是no ack了,如果有消费者,默认就是auto ack,auto ack )
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'min-msg-size': 200,
'producer-count': 2,
'consumer-count': 0]}]
3,3个生产者,0个消费者(0个消费者就是no ack了,如果有消费者,默认就是auto ack,auto ack )
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'min-msg-size': 200,
'producer-count': 3,
'consumer-count': 0]}]
4,4个生产者,0个消费者(0个消费者就是no ack了,如果有消费者,默认就是auto ack,auto ack )
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'min-msg-size': 200,
'producer-count': 4,
'consumer-count': 0]}]
5,5个生产者,0个消费者(0个消费者就是no ack了,如果有消费者,默认就是auto ack,auto ack )
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'min-msg-size': 200,
'producer-count': 5,
'consumer-count': 0]}]
6,6个生产者,0个消费者(0个消费者就是no ack了,如果有消费者,默认就是auto ack,auto ack )
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'min-msg-size': 200,
'producer-count': 6,
'consumer-count': 0]}]
7,7个生产者,0个消费者(0个消费者就是no ack了,如果有消费者,默认就是auto ack,auto ack )
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'min-msg-size': 200,
'producer-count': 7,
'consumer-count': 0]}]
8,8个生产者,0个消费者(0个消费者就是no ack了,如果有消费者,默认就是auto ack,auto ack )
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'min-msg-size': 200,
'producer-count': 8,
'consumer-count': 0]}]
(二)测试指标:no persistent;confirm;no ack;指定queue名称,共1次;每次执行60s。
一个runjava进程:
1,4个生产者,0个消费者
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': 0,
'min-msg-size': 200,
'producer-count': 4,
'consumer-count': 0]}]
(三)测试指标:no persistent;no confirm;auto ack;指定queue名称,共4次;每次执行60s。
一个runjava进程:
说明:生产者使用no confirm,而且数量比消费者多,是为了确保生产速度不会成为消费速度的瓶颈。
1,4个生产者,3个消费者,multi-ack-every 0秒
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'auto-ack': true,
'min-msg-size': 200,
'producer-count': 4,
'consumer-count': 3]}]
2,4个生产者,3个消费者,multi-ack-every 10秒
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'auto-ack': true,
'multi-ack-every': 10,
'min-msg-size': 200,
'producer-count': 4,
'consumer-count': 3]}]
3,4个生产者,3个消费者,multi-ack-every 30秒
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'auto-ack': true,
'multi-ack-every': 30,
'min-msg-size': 200,
'producer-count': 4,
'consumer-count': 3]}]
4,4个生产者,3个消费者,multi-ack-every 60秒
[{'uri': 'amqp://test:123456@10.240.0.4:5672/test',
'name': 'consume',
'type': 'simple',
'params': [{'time-limit': 60,
'queue-names': ['limu01'],
'confirm': -1,
'auto-ack': true,
'multi-ack-every': 60,
'min-msg-size': 200,
'producer-count': 4,
'consumer-count': 3]}]
<