工作记录bug:
【job功能缺陷】分页捞数索引及数据状态不准确,造成job空跑问题:
- 缺陷类型:job类型缺陷
- 发现方式:大数据量时候分页功能测试时,发现分页阀值1000后面的数据无法被job执行。
- 排查方法:查询日志:
a.发现从第二次起,一直捞取前面执行过的1000条数据。
b.查看开发代码:发现捞取数据的SQL是以更新数据为排序索引,所以一直捞取被执行过的数据。
- 解决方案:
a.捞数据的sql增加job处理方案,不会重复捞取已执行过的数据。
通过以上方法,解决了问题,job成功将所有数据都跑过。
【功能缺陷】关联方金额存储方式与常规不同,导致优惠券金额显示不正确:
- 1.发现方式:查询关联方用户优惠券接口时,发现页面显示4位小数,不是2位小数
- 2.排查方法:
a.日志查询,关联方接口返回4位小数。
b.与关联方确认,关联方为了兼容积分类型金额(500分=1元)数据,所以其他金额也统一存储为4位小数。
- 解决方案:
a.与产品沟通进行2位小数的截断处理,返回前端。
通过以上方法:解决了问题,前端金额显示正常。
【性能缺陷】异步调用多重嵌套共用一个线程池,造成调用死锁,请求报错:
- 发现方式:
多线程性能测试,高并发请求的时候,接口返回报错:
- 排查方式:
1.查询报错日志,发现异步调用超时,导致接口报错。
2.查看开发代码,发现报错的方法,调用方也是异步方法,形成了异步嵌套。
3.进一步查看日志,通过父子方法线程号定位,发现大部分线程都被父方法占用,导致子方法无法执行超时,造成死锁。
- 解决方案:
1.加大线程调用队列数量;从40调到500;
2.调整异步嵌套调用方法的位置,调整到前面位置,使异步嵌套调用方法优先执行。
3.新建线程池,各层嵌套,使用各自的线程池,
通过以上方法解决了问题,高并发压测,没有在报错。