记一次队列阻塞问题的排查

1.起因

昨天有别的组测试反馈,生产环境的报备客户,没有给他们系统推送数据。

2.排查

我查了该队列A日志,发现该队列并没有此报备客户数据的入列日志和消费日志。
为什么呢?我一开始怀疑队列阻塞了,但阻塞不应该连入列日志也没有吧。
因为代码是历史的,我只能看代码。

发现A队列的入列,是从MAIN队列分发出来的。历史的业务逻辑就这样:


image.png

好的,问题定位到了,就MAIN队列堵了,让运维加了10个进程。


image.png

看队列监控,发现只是出来一个小的下跌,然后又一路网上。

不科学啊。

看看队列的数据,没啥不正常的。是不是MAIN队列的消费出问题了,嗯,看看日志。


image.png

黄色字体是同一个消费记录的id,从出列到消费完成用了30s,太夸张了吧,查了好几个都是,是这个问题无疑了。查了下代码,这个就是C业务的消费,又也给http请求,这个30s就是http请求的超时时间。
问了一下同事才知道是这个站点挂了,确认这个业务已经没有用之后,让运维临时先改消费进程的代码,把这个业务return true,不消费了。
然后队列就里面将下来了,nnd,简直是直线下降。


image.png