写在之前
打算开一个新tag,记录一下这些年在生产环境遇到过的问题,希望以后这个tag下的文章越少越好…
故障及解决
中午吃饭时收到群里有人反馈说提交保存特别慢,甚至出现提交失败的情况,当时以为是个别情况吃完饭回单位后收到更多的反馈,出现大面积不能提交的情况,查看日志频繁报错:
1 | java.lang.Exception: |
事务?超时?查了一下数据库进程有20多条积压,其中两条特别明显,开始时间在几小时前。联系了运维人员kill掉这部分进程(方法有些暴力)再次查看系统已恢复正常。
排查原因
问题是临时解决了,但为什么会出现这个问题呢?
搜索了一下这个异常的原因大多原于开启了事务没有提交导致关联锁表,所以刚开始的时候问题不明显,慢慢的相关联的表越锁越多问题就爆发了,原来我以为我们的代码都使用了spring的声明式事务,出问题后一排查,果然有人使用了手动控制事务的方式,原因是要控制嵌套事务的分别提交(其实用注解也可以搞定),虽然使用了手动事务但看起来好像没什么问题都是按这个逻辑实现的:
1 | .... |
看起来没什么问题,事实也确实没问题,出问题的点在于由于多处使用这种方式管理事务,在其中一处,应该是之前有try..catch语块了,所以他只加了事务代码结果这个代码是这样的:
1 | .... |
然后,try语句块内拋出了一个NullPointerException
然后问题就产生了。。。
问题找到了修改就简单了,简单的改法就是把捕获异常改为Exception
当然还是建议使用注解事务处理,手动控制很容易疏忽。
本文链接: http://blog.jisuye.com/2017/09/18/pro_bug1/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!