Rabbitmq-FAQ
# 常见问题
rabbitmq监控告警问题
问题一 CPU使用量达到告警阈值
```
排查过程:
当CPU达到告警阈值,可先使用TOP命令来查看进程总体的CPU利用率并确定那些进程花费了高CPU
1.若rabbitmq相关进程如beam.smp、rabbitmq-server、epmd进程消费了较高的CPU,请先确认队列中是否有消息堆积,并查看监控,是否有异常;若没有消息堆积,暂且可以持续监控集群状态
2.若是非rabbitmq相关进程消耗了高CPU,请确认进程涉及到的业务逻辑是否存在问题
```
问题二 网络入流量/网络出流量告警问题
```
当出现网络流量过高的情况,通常是因为服务器与服务器之间拷贝数据导致的,拷贝结束,流量即可恢复正常,如果不是数据拷贝,通常是服务器中毒或者受到攻击,在对内或对外大量发包导致,此时,可按照以下方法进行排查
1.如果您使用的是Linux系统的服务器,可以在系统中安装nethogs查看具体的进程占用流量的情况(如nether eth0->查看网卡具体流量)并杀死该进程;对于一些常见的网络问题,如容器之间网络通信问题,您可以使用Tcpdump工具捕获网络流量,来解决这些网络问题
2.如果您使用的是windows系统,可通过资源监视器(启动任务管理器>资源监视器>网络)看到哪些进程占用网络流量并结束相关进程
```
问题三 容器down告警问题
```
当prometheus监控并发出Container Killed告警,说明容器可能失效或终止运行,若以异常状态退出或健康检查失败,k8s的核心组件kubelet会根据设置的pod重启策略自动重启该容器,例如容器运行时内存超出限制,容器以Failed状态终止,kubelet则会自动重启该容器。而pod中的守护进程supervisor会重新拉起rabbitmq服务。
```
问题四 内存使用量达到告警阈值
日志告警内容如下

```
排查过程:
当内存达到告警阈值,先使用rabbitmqctl status命令来查看rabbitmq消耗内存的情况,一般过多内存消耗会在这几个地方,连接、插件、队列、mnesia、message store索引、其他系统内存,确定并排查相关模块
```

问题五 存储使用率达到告警阈值
```
排查过程:
当磁盘达到告警阈值,一般当磁盘被塞满的情况有两种,一种是日志过大占满了磁盘,一种是有消息堆积,第一种的解决办法就是将日志文件删除,磁盘使用情况即可恢复正常,但这并不是根本的解决办法,还需对日志进行相关的配置,如修改日志级别和限制日志大小;第二种的解决办法可以提高消费者的消费速率或者增加消费者的数量,对堆积的消息进行消费
```
问题六 连接数达到告警阈值
```
解决办法:
1.当客户端数量超过当前最大容量阈值,可增加一个或多个节点来分散负载,rabbitmq的可扩展性可轻松扩增节点,但最根本的解决办法是优化您的应用程序,做好数据设计,使得发送速率与接收速率保持平衡,从而减少成本。
2.也可使用iptables适当的限制连接
```
问题七 Channel数/Exchange数/Queue数达到告警阈值
```
排查过程:
1.先进入某节点,执行rabbitmqctl cluster_status查看集群状态,若集群状态正常请执行下一步;若集群状态异常查看error log,分析报错原因
2.集群状态正常情况下,先确定客户端是否出现连接问题,若无,使用命令行手动创建channel/exchange/queue,查看日志,分析原因
```
服务器重启后rabbitmq服务启动失败问题
首先查看启动日志,查看报错内容 查看日志命令 journalctl -xe
#### 问题一
`由于/var/lib/rabbitmq/mnesia/[rabbit@rabbitmq-plugins-expand](mailto:rabbit@rabbitmq-plugins-expand)的权限为root,而非rabbitmq用户,导致重启无法成功的情况,修改目录的用户与用户组即可解决问题 `

#### 解决办法
1.修改目录的用户与用户组 chown -R rabbitmq:rabbitmq 目录路径
2.重新启动rabbitmq服务 service rabbitmq-server start