记一次印象深刻的Bug/故障

起因

在禅道上收到项目组提的一个故障:有一个业务接口,偶尔查不出数据,其它接口数据都正常,找不出原因,请求平台帮助排查。

项目架构介绍

springcloud微服务项目

注册中心:eureka

数据库:oracle

缓存:redis

orm:springJPA

反向代理:nginx

网关:zuul

容器化技术:docker

容器编排管理:k8s

CD/CI流水线:jenkins

排查过程

1.首先查看了服务器的日志信息,没有异常。


2.本地启了服务本地debug发现无法复现问题。(本地无法复现是很难受的,懂的都懂)


3.怀疑是注册中心注册了非法服务,导致请求轮询的时候轮询到非法服务查询到其他数据库,检查发现无其他非法服务被注册。


4.检查每个服务配置的数据库信息是否一致,检查结果数据库是一致的。(排查到这一步没发现异常,多少有点心灰意冷)


5.观察代码,无意中发现该业务接口使用了多线程,并且项目里有两个线程池,一个业务短信的线程池(标注了@Primary注解),一个专门给流程使用的线程池(没标注@Primary注解)。但是引入TaskExecutor的时候并没有指定name,导致系统内所有的业务都使用了同一个线程池,该线程池配置的最大线程数为16,最大队列数为64,线程池的拒绝策略为CallerRunsPolicy(由调用者处理,这也是日志没报错的原因)。

顺着思路,去服务器通过jps(ps -ef也行)命令查找到业务的进程pid,再通过top -Hp pid 查看到有大量的GC线程和短信线程一直执行,线程总数已超过了80个,导致后面发起的新线程不做任何处理。


6.要求项目组检查代码质量问题,然后检查短信发不出去的问题,最终问题得以解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孵不出鸡的坏蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值