最近一个微服务接口的性能测试项目,以往经验,正常一个接口的单接口负载的 TPS 能达到 3000 多。
测试某些接口的时候出现了 TPS 持续下降的问题。
测试场景:
1、脚本只有一个 url,一个检查点
Action_classes_login_count()
{
web_reg_find("TEXT=className",LAST);
web_url("classes_login_count",
"URL=http://{urlIP}:{port}/dataservice/login/login-stats/classes?periodType={periodType}&date={date}&schoolId={schoolId}&gradeId={gradeId}&order={order}&perPage={perPage}&page={page}",
"Resource=1",
"Referer=",
"Snapshot=t1.inf",
LAST);
return 0;
}
2、并发数固定(20)
3、没有思考时间,没有日志输出,没有任何逻辑
测试结果:
1、刚开始 TPS 在 3000 多,慢慢的 TPS 一路下坡
2、应用服务器的 CPU 从刚开始的 80% 左右,也是一路下坡
3、lr 测试机的 CPU 确是一路高歌,最后维持到最高 100%
说明:
1、固定并发数 20 的原因是为了控制应用服务器的 cpu 占用率,超过 20 并发时,应用的 cpu 就到 90% 以上了
2、测试机的 CPU 从 4 个调整到 10 个,结果也是一样
3、TPS 下坡的时候,增加 user,可以把 TPS 拉上来,但是,还是会慢慢下去
4、不是所有的接口都是这个现象,同一个服务内,有的正常,有的不正常
5、测试数据是有限的数据进行循环的,如果是一条数据并发的话,没有这个问题
6、换过测试机,重装 LR 测试,还是同样的问题
感觉 LR 发着发着偷懒,不发了,但是为啥发包机的 CPU 还那么高?
jmeter 测试
上面有问题的接口,用 jmeter 测试(场景都一样),问题不存在,TPS 很稳定。
写了那么多,感觉大家会问到的,都说明了吧!各位大拿有没有遇到过?