RabbitMQ Linux 故障排查速查手册
一 快速定位与信息收集
rabbitmqctl cluster_status(关注 Running nodes、是否有 down/partitioned)rabbitmqctl list_queues name messages_ready messages_unacknowledgeddf -h、free -m,并留意日志中的 disk alarm / memory alarmtail -n 200 -f /var/log/rabbitmq/rabbit@<hostname>.log /var/log/rabbitmq/rabbit@<hostname>-sasl.logjournalctl -xe | tail -n 200ping <broker_ip>telnet <broker_ip> 5672(AMQP)、4369(epmd)、25672(集群分发)ps aux | grep rabbitmq,ss -lntp | egrep '5672|4369|25672'rabbitmqctl list_connections、rabbitmqctl list_consumersrabbitmqctl list_queues name messages_unacknowledgedrabbitmqctl list_queues name memoryrabbitmqctl status 可查看内存占用模块;磁盘满或接近阈值会触发 disk alarm 并进入流控,需优先处置。二 常见故障与修复对照表
| 症状 | 快速检查 | 修复建议 |
|---|---|---|
| 无法连接 Broker | ping、telnet 5672、ss -lntp;查看 rabbit@*.log 是否拒绝连接 |
校正 主机名/IP/端口;开放 5672/4369/25672;检查 防火墙/安全组;确认服务运行 |
| 管理界面打不开 | `ss -lntp | grep 15672`;进程与端口;日志 |
| 节点启动失败 | journalctl -xe;rabbit@*.log;startup_err |
若 Erlang 崩溃(erl_crash.dump),按日志定位;若 recovery.dets 损坏,备份后删除并重启 |
| 集群节点 down/分区 | cluster_status 显示 partitioned/down |
统一 Erlang cookie;检查网络;按策略处理分区(如 autoheal)并重启异常节点 |
| 磁盘满/磁盘告警 | df -h;日志含 disk alarm |
清理无用消息/队列、扩容磁盘、降低 disk_free_limit;恢复后观察流控是否解除 |
| 内存告警/性能骤降 | free -m;日志含 memory alarm;list_queues 看积压 |
增加消费者、启用 Lazy Queue、调高 vm_memory_high_watermark;必要时扩容内存 |
| 消息堆积/消费慢 | list_queues 看 messages_ready/unacknowledged |
增加消费者并发、优化消费逻辑;合理设置 prefetch_count;评估持久化与镜像策略 |
| 权限/认证失败 | 管理界面/客户端登录失败;日志认证报错 | 检查 vhost、用户权限、连接参数;确保凭据正确 |
| 主机名解析错误 | hostname 与 /etc/hosts 不一致;rabbitmqctl status 报错 |
在 /etc/hosts 正确映射 IP <-> 主机名;保持与节点名一致 |
| 目录权限错误 | 重启失败;目录属主非 rabbitmq | 修正数据目录属主:chown -R rabbitmq:rabbitmq /var/lib/rabbitmq |
以上检查与修复要点对应的命令与现象,可参考官方常用命令、日志路径与典型故障案例。
三 高频场景的标准修复步骤
journalctl -xe、tail -n 200 /var/log/rabbitmq/rabbit@*.log、rabbitmqctl statussystemctl restart rabbitmq-server 或 service rabbitmq-server restartrabbitmqctl stop_app → rabbitmqctl join_cluster rabbit@<other-node> → rabbitmqctl start_appcluster_status 正常、队列恢复、无 alarmcluster_status 显示 partitionedrabbitmqctl set_cluster_partition_handling autoheal)df -h、free -m、日志 disk/memory alarm四 日志与关键文件速查
/var/log/rabbitmq/rabbit@<hostname>.log/var/log/rabbitmq/rabbit@<hostname>-sasl.logtail -f /var/log/rabbitmq/rabbit@<hostname>.log/var/log/rabbitmq/startup_errerl_crash.dump(配合日志定位)/var/lib/rabbitmq/mnesia/(权限应为 rabbitmq:rabbitmq)/var/lib/rabbitmq/.erlang.cookie(集群节点需一致,权限 400)rabbitmqctl cluster_statusrabbitmqctl list_queues name messages_ready messages_unacknowledgedrabbitmqctl list_connections、rabbitmqctl list_consumersrabbitmqctl list_queues name memoryrabbitmq-plugins enable rabbitmq_management五 预防与优化建议