记一次MQ异常
RabbitMQ投递消息异常
事情起因:最近在开发ChatRoom的过程中使用到了RabbitMQ作消息的投递,之前都用的好好的,当天突然之间消息发送之后消费者监听一直没有获取到消息
问题解决流程:
通过debug发现covert方法已经被调用,但是没有收到ack的回调,这里打开rabbitmq的控制台
可以看到交换机一直没有收到消息,并且在控制台也没有报错,推断出生产者在投递给交换机的时候就出了问题,但是投递失败应该会触发回调函数失败然后重试,但是这里只是尝试了一次失败后就没有后续的行为了,并且测试程序在发送后一直阻塞,并没有正常退出
这里我们连接上服务器查看一下mq的运行情况,连接上服务器后发现服务器的cpu和内存都异常高,cpu占用已经到了100%,这个先放一边,先看下mq的运行日志,通过日志发现生产者已经成功连接上服务器,证明mq在运行中,这时候就联想到之前服务器硬盘空间已经快满了,这里推断应该是硬盘空间满了导致内存中数据一直往硬盘写入失败,导致的内存没有得到释放,所以一直在重试导致了CPU和内存占用过高,后续清理硬盘空间后服务器的内存和CPU占用就低了,而且mq也能正常工作,具体的清理流程见《QG服务器CPU和硬盘异常飙升问题》
反思:这个问题发生的还是挺突然,之前服务器硬盘已经满过一次了,当时只是简单清理了下日志,没想到这么快硬盘又满了导致服务不能正常运行,所以以后还是要定期清理一下服务器,保证不回出现异常
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Coding Road!