记一次服务挂机的排查

过去的,未来的
2022-07-29 / 0 评论 / 0 点赞 / 489 阅读 / 547 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-07-29,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

背景

    今天下午,旁边同事访问本站的时候,发现进入不了了,
就询问我,是否网站有问题,我赶紧登录页面查看,确实是访问不了了。。。。

问题排查

1、进入的服务器,首先查看docker容器,发现有几个容器已经挂掉。

image-1659100745277

2、尝试重新启动,发现还是启动不成功
3、开始查看是否有高的内存和cpu,发现磁盘已经100%

image-1659100877282

4、还是太单纯,以为是磁盘不足了,就重新扩容了,磁盘
5、 扩容完毕后,重新启动,发现可以使用了,就以为完毕了。

又开始了

万万没有想到。。晚上的时候,有不能访问了。 这时候就要看看到底是什么原因。还是查看了,docker容器,发现还是有几个已经挂了,且磁盘又一次打满。只能再排查排查。
使用top命令,发现课一个进程的cpu使用率很高。
开始根据这个进程pid找到相对应的java进程,发现是一个java项目,
就开始看了这个项目的日志。不出意外的发现他的日志已经很多,且不断有报错日志打印,继续分析发现是RabbitMQ的一个消费者一直报错。没有消费成功。问题找到了。开始处理。

1、在这个消费的地方,我在程序层面先加try处理
2、查看文档

RabbitMQ消息监听程序异常时,消费者会向rabbitmq 服务器发送Basic.Reject,表示消息拒绝接受,由于Spring默认requeue-rejected配置为true,消息会重新入队,然后rabbitmq 服务器重新投递,造成了程序一直异常的情况。我们通过rabbitmq监听消息的时候,可以添加tr{}catch{}语句 也可以选择设置requeue-rejected为false来丢弃消息。

3、设置重试次数

image-1659101630035

0

评论区