项目背景:

公司最近有一个报表项目要做压力测试

测试场景:

单报表查询场景

测试环境:

线上压测

问题描述:

脚本调试完成之后,脚本调试完成之后,放到 contorller 里面可以执行压力测试, 负载测试 1 个并发运行 5 分钟,系统没有任何异常,加到 5 个并发的时候,lr 开始报错,错误详细为 Action.c(6): Error -26612: HTTP Status-Code=500 (Internal Server Error) 。

问题排查:

1.查看应用日志并没有错误日志。
2.再次调试脚本,1 个并发跑确实没问题,两个并发跑就开始返回 500 的 error,于是在网上查资料,发现关于这种的有很多给出的答案,有关于请求压力大的,做关联的,参数化有问题的等等,一圈下来还是问题依旧,还浪费了好多时间。 然后突然查询到一片文章是说 可以 通过打开 lr 自身的 log 日志,进行定位问题原因。
路径为:controller--->results--->results setting

打开文件夹下的 res/log/****.log 里面会有当前场景运行的 log 日志。
注:启用这个首先保证脚本的 log 是打开的。
3.再次运行场景,依旧报错,打开 res/log/下生成的日志,然后查询 error 信息

看到有个异常信息, 首先判断我一个并发的时候,并没有这个异常,两个并发的时候,为什么会出现类型转换这个异常,而且通过日志信息判断是服务器返回的,并不是我输入有问题。找到开发同学一块定位问题原因。
4.通过开发同学排查问题原因,是因为查询方法中调用 SimpleDateFormat() 这个方法存在线程安全问题, 通过添加同步锁,问题得到解决,再次验证后,解决该问题。
有兴趣的可以看下这篇文章:
http://www.cnblogs.com/zemliu/archive/2013/08/29/3290585.html

总结:

1.关于 lr 返回 http 500 的 error,可能有多种原因产生的,压力过大,服务器参数设置,脚本问题,关联,参数化等等,都有可能造成这个问题。但是盲目下手,浪费时间还影响效率。最简单根本的还是通过日志进行分析。最快定位问题原因。


↙↙↙阅读原文可查看相关链接,并与作者交流