Ubuntu环境下RabbitMQ性能测试指南
RabbitMQ官方性能测试工具PerfTest基于Java开发,需先安装Java 8及以上版本(推荐Java 11及以上)。在Ubuntu终端执行以下命令:
sudo apt update
sudo apt install openjdk-11-jre openjdk-11-jdk -y
# 验证安装
java -version
确保RabbitMQ已安装并启动(默认端口5672用于AMQP协议,15672用于管理界面):
# 启动RabbitMQ服务
sudo systemctl start rabbitmq-server
# 设置开机自启
sudo systemctl enable rabbitmq-server
# 检查服务状态
sudo systemctl status rabbitmq-server
PerfTest可通过以下方式获取:
perf-test.jar(推荐),地址:rabbitmq-perf-test/releases;PerfTest是RabbitMQ官方推荐的性能测试工具,可通过命令行配置生产者和消费者数量、消息大小、速率等参数。
java -jar perf-test.jar \
--uri amqp://guest:guest@localhost:5672 \ # RabbitMQ连接URI(默认用户名/密码:guest/guest)
--producers 2 \ # 生产者数量
--consumers 4 \ # 消费者数量
--rate 1000 \ # 每秒生产消息数(0表示不限速)
--queue throughput-test \ # 测试队列名称
--size 100 \ # 消息大小(字节)
--autoack # 自动确认(去掉则为手动确认)
参数说明:
--uri:RabbitMQ连接地址(集群环境可填写多个节点,用逗号分隔);--producers/--consumers:生产者和消费者线程数(模拟并发负载);--rate:消息生产速率(0表示不限速,根据测试需求调整);--queue:测试队列名称(需提前创建或允许自动创建);--size:消息体大小(单位:字节,如100字节、1KB等);--autoack:启用自动确认(消息发送后立即删除,减少ACK开销;若需可靠传递,去掉该参数并配置手动确认)。--persistent参数(队列和消息均持久化);topic、fanout),添加--exchange <name>和--routing-key <key>参数;--time <seconds>参数(如--time 300表示测试5分钟);--output-file <path>参数(如--output-file result.json)。java -jar perf-test.jar \
--uri amqp://guest:guest@localhost:5672 \
--producers 3 \
--consumers 3 \
--rate 500 \
--queue persistent-queue \
--size 200 \
--persistent \
--time 60
JMeter是一款功能强大的性能测试工具,通过AMQP插件可模拟更复杂的业务场景(如HTTP与MQ混合负载、动态参数消息)。
# 安装JMeter(Ubuntu)
sudo apt install jmeter -y
# 添加AMQP插件(通过JMeter Plugins Manager)
# 打开JMeter -> 选项 -> Plugins Manager -> 搜索“AMQP” -> 安装“RabbitMQ AMQP Client”
通过JMeter命令行运行测试:
jmeter -n -t rabbitmq_test_plan.jmx -l result.jtl
-n:非GUI模式运行;-t:指定测试计划文件;-l:保存结果到result.jtl文件(可通过JMeter打开分析)。http://localhost:15672(默认账号:guest/guest),查看“Queues”页面的消息堆积数(Ready/Unacked)、消息速率(Publish/Consume)、消费者数量等指标;rabbitmqctl命令获取队列详情:rabbitmqctl list_queues name messages_ready messages_unacknowledged
top、htop、iostat命令查看),过高可能导致性能瓶颈。--producers)提高消息发送速率,但需避免过度并发导致网络拥塞;--consumers)提高消费能力,调整--prefetch-count(每次从队列获取的消息数,默认1000)减少网络往返次数;--persistent参数),提升性能;关键业务需开启,但会增加IO开销;--uri参数连接集群)。