性能测试问题解决——订单号重复类问题定位及解决
2015-12-14 10:09
393 查看
在性能测试过程中,经常会遇到因重复提交或重复生成导致事务失败的问题,下面以下单重复的问题为例,对此类问题的定位和解决思路做一些总结。
1. 下单失败的报错均为订单重复问题:此订单已经存在,请不要重复提交
2. TPS出现有规律的上下波动,如图:
2. 检查性能测试脚本中是否有涉及订单号生成的参数,是否会有因参数设置导致生成重复的问题:经检查脚本中没有与订单号相关的参数,订单号由系统自动生成。
3. 检查系统订单生成规则,是否会存在大量提交的时候系统生成订单重复的问题:经检查,系统订单生成规则为2位固定前缀+yymmddhhmm+3位长度seq数值。
很明显,问题就出在订单生成规则这里,同一分钟内,仅支持1000笔订单,当压测时大量下单时,同一分钟内只要有超过1000笔订单,余下的下单都会出现重复报错。通过检查TPS曲线图,也基本符合一分钟就下降一次的规律。系统下单规则设计之初未考虑到大并发的场景,1分钟仅支持1000笔订单,即TPS大于1000/60~16.7。
1. 检查系统日志查看报错原因
2. 检查性能测试脚本中是否有导致重复问题的相关参数,找到并检查参数设置
3. 检查系统内部生成规则,是否会导致大并发的时候出现重复问题
以后有新的总结,希望我也能一并放一起,方便交流学习。
一、问题现象
性能测试场景为下单,性能测试过程中,事务失败率过高,接近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. 检查系统内部生成规则,是否会导致大并发的时候出现重复问题
以后有新的总结,希望我也能一并放一起,方便交流学习。
相关文章推荐
- 如何在eclipse jee中创建Maven project并且转换为Dynamic web project
- [翻译]Transitioning to ARC Release Notes中文版
- BurpSuite_Pro Ver1.6.24 最新破解版分享
- RESTful API
- DBA_JOBS_RUNNING ;user_jobs
- nginx & flup & django & python3.x @ window7配置备忘录
- PDF转化成Word网站推荐
- 百度无人驾驶汽车上路 安全系数究竟有多高
- jquery easyui结合mysql数据库实现后台分页
- 观察者模式在安卓中的应用
- iframe跨域
- End-To-End Memory Networks
- UIScrollView的自动布局最简单实现方式,不用一句代码即可滚动
- curl爬不到想要的结果,原因何在
- React-Native环境配置
- App Store--心酸的上线路,说说那些不可思议的被拒理由
- 生产者和消费者问题
- iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等
- 2.stdin, stdout, stderr以及重定向
- 如何退出MyEclipse2014的Debug模式