连接超时导致消息堆积

问题背景

线上生产环境客户反馈,客户在我们的sass系统中点击"同步tiktokshop"时,同步的数据与tiktopshop数据不一致

问题描述

上午收到阿里云报警,线上MQ某台机器消息堆积严重,其余机器均为正常

问题排查

初步怀疑sql慢查询问题

由于问题主要出现在Proxy同步系统(一个专用于同步的服务),在RDS MySQL的SQL洞察和会话管理模块进行针对性排查,确实有发现慢sql(处理时间0.9秒,高于标准0.5秒),但分析认为不至于产生消息堆积问题

尝试在sql查询条件上增加更多索引条件,使sql查询速度降到(0.2s)

修复业务逻辑查询过慢问题

慢查询主要是因为同步是根据类别分批同步,每次同步都会进行一个总表的关联查询,当同步任务过多时,导致mysql的cpu过载,虽然在阿里云监控上未发现mysql的cpu有峰值,但为避免后续出现问题,这里也同步做修复

对查询的总表业务新增一个缓存,键值为同步任务Id,且在开始分发同步任务之前,先查询总表,构建缓存,避免所有的同步任务同时间查询缓存没查到导致走mysql问题

问题自测

通过以上方法,在测试环境进行压力测试,发现mq依然出现消息堆积问题,

进一步排查

在同时提醒下,使用jstack分析java线程,发现某一线程一张处于wait状态,导致mq消息堆积
进一步跟踪发现,该进程尝试http请求外网接口,连接一直处于超时

配置添加超时时间,解决该问题

CC BY-NC-SA 4.0 Deed | 署名-非商业性使用-相同方式共享
最后更新时间:2025-11-18 12:46:00