`
vinceall
  • 浏览: 10274 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

记一次诡异的bug

阅读更多

前提:一份万年不变的代码,居然报了错

 

我们公司也算是个电商公司,网站自然支持支付宝和微信支付,支付网关完成后,使用一直没啥大问题,直到uat环境有一天突然基本不能支付,所有支付方式回调都失败,于是开始了漫漫bug长路。。。皱眉

 

1.看堆栈

root cause: caused by OptimisticLockingFailureException.....

乐观锁异常,是在根据id查询订单时报出来的,于是去看代码,没有发现代码上有啥问题,over哭

 

2.该bug并非每次都出,有很小的概率会成功,并且debug时不会抛异常,于是怀疑是多线程问题

由于uat环境最近网络不是很稳定,于是初步怀疑是支付宝或微信支付多次通知,多个线程同时查询(查询前有update hibernate托管的订单对象的操作),于是update--query交错执行,导致报错。

 

然后把线程池改成1,部署重启,依然报错。。。。over哭哭

 

3.看起来应该是多线程,但貌似又不是多线程问题,绞尽脑汁,看了两天的bug,无果而终。。。哭哭哭

 

4.寻找原因失败,那就对比吧,此时发现另外一个自测的test环境没有此问题。既然代码是一样的,那就只能怀疑是数据库了,虽然很牵强。。。

于是把test数据库copy到uat环境,重启服务器,bug神奇消失,好吧,虽然没找到原因,但总算解决了。

由于还要忙其他事,没那么多时间耗在这上面,所以勉强放过它吧,哦也~大笑

 

5.平静的度过了一周,直到一天下午,测试妹纸又跑来说粗大事啦支付不起啦。堆栈一样,错误一样,阴魂不散啊,这要怎么玩?!于是强烈怀疑运维对数据库做了什么(因为这段时间运维确实动过环境,不太稳定),so尝试甩锅给运维,直到。。。。

 

另一个妹纸跑来说了另一个问题,心想既然支付不了暂时解决不了,不如换个脑筋。于是开始看新问题,发现怎么特么数据库里一条记录存的id不对呢,根本和订单上的id不一样啊,就特么不知道是哪儿来的id,这什么鬼,彻底懵逼。。。哭哭哭哭

 

此时正好另一个娃听到了,说他遇到过这种情况,是因为我们的另一个服务在通知我们这边时,配置了多个不同端但url相同的记录,即不同端的通知全特么都会通知到我们这边,但我们这边不需要其他端的啊,我只要我们端的啊,你把其他端的数据发给我我能找到神马。。。于是屏蔽了其他端的通知,问题解决大笑,总算心情好点了,但特么支付问题还是要解决啊,测试都催了好久了,这么大的问题啊,继续抠脑袋。。。

 

抱着一丝侥幸心理,又支付了一把,居然神奇的成功了,不敢相信,又来了几发,没有异常,完美支付!难道和这个配置有关?!

 

于是又去梳理了一遍,发现:我们的服务在查询时,发现记录被更新了,但不是我们自己更新的,而是接收通知的服务更新的,而更新它的就是这些莫名配置出来的端发来的通知(其实根本不需要其他端啊,我们暂时只有一个端啊),所以乐观锁异常,这真是得来全不费工夫啊。。。

 

于是挨个去问,果然有人在支付出问题之前添加了好几个没用的通知地址配置,你手贱啊,没事添加没用的配置干啥啊?!我滴哥啊,既然找到原因,接下来就好办了:

 

1.接收通知的服务添加校验,丢弃非本端的通知

2.目前暂无配置多端的需求,配置模块添加唯一性校验,禁止添加多个端

 

看了2天的bug,硬是卵都没看出来,就这样解决了。。。。码农桑不起啊,心塞。。。。

 

不过排查bug也学到了很多东西,这也许也算码农的苦与乐吧

 

2017 fighting

 

 

分享到:
评论

相关推荐

    一次kernel bug的分析过程

    记录一次kernel bug的分析过程,万事开头难,希望此次是一个好的开端。

    记一次新手都不会写出来的bug,我给了自己一巴掌.pdf

    记一次新手都不会写出来的bug,我给了自己一巴掌.pdf

    记一次灵异般的 Bug 调试经历1

    来看看他在 Quora 上拿到 16k 多顶的经历:我曾经受雇于一位心理学家,去修复一个“输出有些奇怪的”软件,那个软件是他之前带过的一个研究生编写的。所以我可

    通信录练习 第一次写的代码 功能还是齐全 BUG还是存在不少

    通信录练习 第一次写的代码 功能还是齐全 BUG还是存在不少

    BugFree(Bug跟踪管理系统) v3.0.rar

    我们在2.x 版本的兼容和升级上做了大量的工作,但毕竟是一次完全的技术重构,系统稳定性和用户体验还需要在后续版本不断完善。提醒大家在对BugFree进行升级之前,对原有数据进行备份。也非常欢迎大家就使用过程中的...

    《程序人生》记一次敖丙的线上P2事故1

    《程序人生》记一次敖丙的线上P2事故1

    bug定义和返工率计算统计方法

    1.当问题在文档上已经明确之后,修改完成提交测试部,测试人员发现程序上还有文档上标注的问题,记一次反复。

    BugTracker.NET v3.6.2 免费版.zip

    当您第一次安装它,它很简单。然而,为您提供的能力,改变它的配置,以处理您的需求,如果他们更复杂。 BugTracker.NET特点: 可以很好地用于跟踪客户支持问题了。您可以自定义在不改变代码,以便它说:“问题”...

    梦真键盘屏幕全记录 v8.5.zip

    运行梦真键盘屏幕全记录一次后,您可以对本软件进行任意重命名,也可以删除本软件,甚至可以把本软件复制到U盘上,查看记录的时候,从U盘上打开本软件即可。 梦真键盘屏幕全记录 v8.5更新内容: 1.新增软件启动...

    详细记一次Docker部署服务的爬坑历程

    第一次写文。请允许我自我介绍一下… 大家好我是茉莉。为什么叫茉莉呢?emmm ID茉莉转圈圈? 皮一下,嘻嘻嘻。笔者两年小菜鸡(差三天满两年)。因为公司只有一个我和前端两个人。所以线上服务部署的任务自然而然就...

    【bugfix】记一次CPU飙高的排查经历

    目录 1.定位进程 2.定位线程 3.线程虚拟机栈分析 4.解决方案 4.1 升级JDK 4.2 使用ConcurrentHashMap 1.定位进程 top拿到cpu占用最高进程的进程号pid=14398 2.定位线程 top -H -p pid 特定进程中的线程 ...

    一次nginx 504 Gateway Time-out错误排查、解决记录

    记一次莫名其妙的网站失去响应排查。之前网站一直是使用nginx做代理后端的apache运行php来提供服务。apache经常会不定期不定时间的出现不能服务失去响应,然后nginx出现”504 Gateway Time-out”查看错误日志也看不...

    关于onScroll事件在IE6下每次滚动触发三次bug说明

    这里有一个人和我一样的情况 ...但帖子内有人测试又没问题,我测试的IE6是windows 2003下的,不...解决办法是用一个全局变量来限制触发的3次事件只执行一次,200ms后再将该变量复位即可。 这个问题比较罕见,特此记录一下

    搜一次CMS电影程序 PHP版 v1.6 build 20130129.rar

    搜一次CMS电影程序PHP版 v1.6 201301129 更新记录: 1、修复了后台的部分BUG,更换editor编辑为kindeditor编辑器 2、添加了视频、文章内容模板中上一篇、下一篇的两个标签 3、核心代码调用方式优化 4、修复了...

    课堂活动1.0.0bug1

    《课堂活动》1.0.0中的bug梓君part:1、头顶上的title2、首页转发的title3、多加一些活动,活动的若第一次就没有更多的显示出来4、表单提示,表

    Bootstrap 模态框多次显示后台提交多次BUG的解决方法

    点击下面的按钮一次,弹出模态框。点击提交,会直接 alert(“提交”) 。点击一次会觉得很正常,但是如果你重复点几次模态框,会发现再次点击 提交 ,alert 会出现多次。 简书无法展现效果,可参见 代码如下...

    一份超级详细的Java面试题【大厂面试真题+Java学习指南+工作总结】

    工作总结!日志打印的15个建议 ...记一次接口性能优化实践总结:优化接口性能的八个建议 程序员必备基础:如何安全传输存储用户密码? 一次代码优化实践,用了模板方法+策略+工厂方法模式 保证接口数据安全的10种方案

    记一次Oracle数据恢复过程

    这样的错误居然出现在应用代码中,显然是重大的BUG。那个是罪魁祸首的SQL,UPDATE语句,其WHERE条件仅仅只有一个where 1=1。 系统的维护人员称是星期五出的错,发现出错是在星期天,也就是我恢复数据的日期,与声称...

    ssb(struts2,spring3,mybatis3)整合实现的家庭费用记录系统

    ssb(struts2,spring3,mybatis3)实现的家庭费用记录...目前有一bug : tomcat初始启动时,登录页面ajax验证用户登录需多次点击登录按钮才通过验证 需注意。后续会改进 本人Java初级,刚接触一年Java 写的不好,大拿勿喷

Global site tag (gtag.js) - Google Analytics