CentOS消息队列性能优化策略
net.core.somaxconn至65535、net.ipv4.tcp_max_syn_backlog至65535),优化网络缓冲区大小,降低延迟。ulimit -n 65535增加每个进程可打开的文件描述符数量,避免消息队列连接数过多导致资源耗尽。/etc/sysctl.conf,设置net.ipv4.tcp_tw_reuse=1(复用TIME_WAIT连接)、net.ipv4.tcp_fin_timeout=30(缩短FIN_WAIT超时时间),提升网络连接复用率。vm.swappiness=10(降低swap使用概率,优先使用物理内存);设置vm.dirty_background_ratio=5、vm.dirty_ratio=10(控制脏页刷新频率,平衡I/O与系统响应)。vm_memory_high_watermark=0.4(内存使用达40%时触发流控,阻止新消息进入);vm_memory_high_watermark_paging_ratio=0.75(内存达阈值的75%时开始页面置换,避免突然阻塞);限制队列长度(通过x-max-length参数,如channel.queueDeclare(queueName,false,false,false,Map.of("x-max-length",10))),避免队列过长导致内存溢出或刷盘延迟。disk_free_limit={mem_relative,1.0}(磁盘剩余空间不低于总内存大小),避免磁盘满导致消息无法写入;开启lazy刷盘模式(sync_mode=lazy),减少同步刷盘次数,提升写入性能。rabbitmqctl join_cluster);设置镜像队列(rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'),实现队列数据多副本同步,提升容灾能力。num.network.threads=num_cpu_cores+1(处理网络请求的线程数)、num.io.threads=num_cpu_cores*2(处理磁盘I/O的线程数);设置log.dirs=/data/kafka1,/data/kafka2(多目录负载均衡);增加分区数(num.partitions,建议与消费者线程数匹配),提高并行处理能力。batch.size(如100KB-200KB),减少网络请求次数;设置linger.ms=10-100(延长消息等待时间,聚合更多消息);启用压缩(compression.type=snappy/lz4),降低网络传输和存储开销。fetch.min.bytes=1MB(每次拉取的最小数据量)、fetch.max.wait.ms=1000(拉取等待时间),减少拉取次数;增加消费者线程数(与分区数匹配),提高消费并行度。batch.size、RabbitMQ的ConfirmListener批量确认);消费者采用批量拉取(如Kafka的max.poll.records),降低网络往返次数。CachingConnectionFactory、Kafka的KafkaProducer池),避免频繁创建和销毁连接的开销。rabbitmq-plugins enable rabbitmq_management)查看队列状态;收集Kafka日志(log.dirs目录下的server.log),分析Broker性能;使用iostat、vmstat监控系统资源,定位磁盘、CPU或内存瓶颈。snapshot、RabbitMQ的备份队列);当性能下降时,通过增加Broker节点(Kafka)、扩展集群节点(RabbitMQ)或升级硬件(如增加SSD、内存)提升系统吞吐量。