美文网首页
2019-01-02线上问题排查

2019-01-02线上问题排查

作者: Tomy_Jx_Li | 来源:发表于2019-01-02 19:25 被阅读12次

问题描述

第三方的用户A用户定了5笔订单,B用户定了1笔订单。但是订单中心收到的却是A定了4笔订单,B用户定了2笔订单。

初步排查

整个调用流程为
上游渠道->sdp->订单中心(本系统)->下游渠道
初步怀疑是sdp进行转发的时候导致了并发问题。所以就将sdp的日志进行查看排查,结果发现sdp的转发没有问题,所以开始进行订单中心的代码审查。

订单中心排查

因为是订单中心代码日志打印的时候,已经出现了入参替换,所以怀疑是在日志拦截器之前。刚好,在日志拦截之前有一个对request进行替换的动作发生了。所以查找这个类ChangeInVarsFilter。看到了他具体的替换逻辑如下图:


替换request代码实现

那么再次进入这个方法看到如下逻辑:


具体的获取Wrequest逻辑
看到这里,就发现了一个变量resourceStr,只有这个变量可能出问题了,因为其他的都是线程安全的。都是方法内变量。所以继续查看。
resourceStr的变量类型及初始化时机

看到这里,基本上也明白是咋么回事了。也就是resourceStr变量是一个静态变量,是共享资源。当线程a完成了对resourceStr的初始化的时候,还没有来得及做下面的动作,b线程进入,并且又对resourceStr进行了初始化。再接下来的动作中a线程中的变量resourceStr已经与b线程的一致。
至此,问题基本明了,接下来就是修改了。

问题解决

问题解决思路,将共享变量resourceStr变成对象的成员变量,如下图:


resourceStr实例变量

然后就方法也改为实例方法即可。改造完成。试了下效果没有问题。

相关文章

  • 2019-01-02线上问题排查

    问题描述 第三方的用户A用户定了5笔订单,B用户定了1笔订单。但是订单中心收到的却是A定了4笔订单,B用户定了2笔...

  • disruptor 消息丢失

    线上消息丢失问题排查

  • 排查线上问题

    导出heap dump: jmap -dump:format=b,file=${fileName} ${PID}导...

  • 线上问题排查

    一、了解机器连接数情况问题:1.2.3.4的sshd的监听端口是22,如何统计1.2.3.4的sshd服务各种连接...

  • 线上问题排查

    分析原因 处理办法 1.热修复2.是否可以由后台兼容(比如图片尺寸不对,由后台保证下发正确尺寸图片)3.是否可以切...

  • 游戏服务器线上问题排查定位实战

    线上问题排查定位实战(游戏服务器) 监控先行 线上常见问题 问题排查、定位、解决 参考、补充 Q & A 监控先行...

  • netty线上问题排查

    记一次压测异常排查

  • 8、线上问题排查

    文章主要列出了常见的排查工具,也有部分线上问题案例; JVM 问题排查 JDK工具包 javap 反编译工具jav...

  • 线上问题排查流程

    线上问题排查流程 线上问题的跟进,修复,排期,由测试录入Wone,记录为线上bug。然后指给产品,由产品进行排期修...

  • 一步一步搭建前端监控系统:如何定位前端线上问题?

    摘要: 记录用户行为,排查线上BUG。 作者:一步一个脚印一个坑 原文:如何定位前端线上问题(如何排查前端生产问题...

网友评论

      本文标题:2019-01-02线上问题排查

      本文链接:https://www.haomeiwen.com/subject/brltrqtx.html