Linux下RabbitMQ性能优化策略
Connection对象;每个线程使用独立Channel,减少连接/销毁开销。例如:Connection connection = factory.newConnection(); Channel channel = connection.createChannel();(循环发送消息时复用channel)。confirmSelect(),批量发送消息后等待统一确认(waitForConfirmsOrDie),减少网络往返。实测可提升吞吐5~10倍。basicQos(prefetchCount)限制每个消费者预取消息数(如10~100),避免消费者被过多消息压垮,实现公平分发。配合manual ack使用,防止消息丢失。vm_memory_high_watermark.relative(如0.7,表示内存使用达70%时触发流控)、vm_memory_high_watermark_paging_ratio(如0.5,表示内存使用达50%时将消息换页到磁盘),避免内存溢出。同时设置disk_free_limit(如2GB),确保磁盘空间充足。/etc/security/limits.conf中添加rabbitmq soft nofile 65536、rabbitmq hard nofile 65536;在rabbitmq-env.conf中设置RABBITMQ_OPEN_FILES_LIMIT=65536。rabbitmq-plugins list查看插件,禁用调试类插件(如rabbitmq_tracing),减少资源消耗。rabbitmq-env.conf中设置ERL_FLAGS="+sbtu +sct true"(调整调度器行为)。direct(路由效率高)或topic(灵活路由),避免fanout(广播所有绑定队列,内存占用高)。x-max-length(如1万条)限制队列长度,避免无限增长;设置x-message-ttl(如1小时)自动删除过期消息,释放内存。ext4或XFS文件系统(高并发环境下表现更好),并调整挂载参数(如noatime,减少文件访问时间更新)。rabbitmq-plugins enable rabbitmq_management启用管理插件,通过Web界面或REST API监控队列长度、内存使用、消息速率等指标。rabbitmq_queue_messages_ready、rabbitmq_memory_used),通过Grafana可视化展示,及时发现性能瓶颈。