您的位置:首页 > 其它

性能测试问题解决——订单号重复类问题定位及解决

2015-12-14 10:09 393 查看
在性能测试过程中,经常会遇到因重复提交或重复生成导致事务失败的问题,下面以下单重复的问题为例,对此类问题的定位和解决思路做一些总结。

一、问题现象

性能测试场景为下单,性能测试过程中,事务失败率过高,接近3:1;TPS曲线上下波动较大。

1. 下单失败的报错均为订单重复问题:此订单已经存在,请不要重复提交

2. TPS出现有规律的上下波动,如图:



二、问题定位

1. 检查系统日志查看报错原因:在日志中找到因重复提交导致的定单号,通过检查数据库,发现此订单已成功插入数据库,因此重复提交必然会报错。

2. 检查性能测试脚本中是否有涉及订单号生成的参数,是否会有因参数设置导致生成重复的问题:经检查脚本中没有与订单号相关的参数,订单号由系统自动生成。

3. 检查系统订单生成规则,是否会存在大量提交的时候系统生成订单重复的问题:经检查,系统订单生成规则为2位固定前缀+yymmddhhmm+3位长度seq数值

很明显,问题就出在订单生成规则这里,同一分钟内,仅支持1000笔订单,当压测时大量下单时,同一分钟内只要有超过1000笔订单,余下的下单都会出现重复报错。通过检查TPS曲线图,也基本符合一分钟就下降一次的规律。系统下单规则设计之初未考虑到大并发的场景,1分钟仅支持1000笔订单,即TPS大于1000/60~16.7。

三、问题解决

通过修改订单生成规则,去掉yymmddhhmm的限制(方法有多种,这里只是其中一种),事务失败率和TPS曲线波动的问题都得到了解决。

四、问题总结

总的来讲,对于这类重复类的问题,我个人认为的定位思路为:

1. 检查系统日志查看报错原因

2. 检查性能测试脚本中是否有导致重复问题的相关参数,找到并检查参数设置

3. 检查系统内部生成规则,是否会导致大并发的时候出现重复问题

以后有新的总结,希望我也能一并放一起,方便交流学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: