本帖最后由 测试积点老人 于 2018-9-26 10:49 编辑
本人现在要对一个API网关的性能做测试,在搭建环境的时候,遇上了一个让我百思不得其解的问题,想请各位帮忙看一下,能解决当然万分感激,当然能提供解决思路的也十分感谢。 前提发压机: 云服务器 8核8G
被测机: 云服务器 2核4G 测试工具:基于python的locust。以下的测试我用docker容器起的locust 和 非docker容器起的locust 都尝试过了,数据还是一样的。
locust 运行模式 都是master-slave 测试接口1:
http://.../s/0ms/1k
测试接口2:
http://.../s/200ms/1k 为了方便的调试,用java的spring boot 框架写的测试接口。
测试接口1和测试接口2之间的不同就是接口测试2,我加了200ms的延迟,测试接口没有任何业务逻辑运算。
数据一场景一测试接口1:http://.../s/0ms/1k
slave数:1个
并发用户:1000个
这组数据我得到的信息是一个slave的时候,1000个用户并发下得到的TPS是600左右,并且是在linux服务器上一核满负荷的情况下。被测服务器的cpu使用率属于正常。 场景二测试接口1:http://.../s/0ms/1k
slave数:8个
并发用户:1000个
当我把slave加到8个的时候,1000个用户并发下,TPS差不多要4400左右了,发压机现在是8核满负荷运行。被测服务器的cpu使用也从前面的低使用率上升到了快平均cpu使用率接近45%了。我想说的是1slave的极限tps数 * slave的数量 应该等于整体的 tps的数量。以前测的都是开发写的接口,所以这条规则我是用到现在的。 场景三测试接口2:http://.../s/200ms/1k
slave数: 1个
并发用户: 1000个
测试接口2,因为有200ms的延迟,所以1个slave进行请求的时候,我得到的500左右tps。其他情况也正常。 场景四测试接口2:http://.../s/200ms/1k
slave数: 8个
并发用户: 1000个
当我把slave加到8个的时候,问题出现了,就好像突然遇上了什么限制,TPS在1000的时候就到了一个稳定值,如果按照我以往的经验,一个slave的TPS在500,那么8个slave的TPS应该在4000左右才是比较正确的。在看一下负压机的cpu,竟然不是满负荷的,十分悠闲的分在8个cpu上,再看被测服务器这里的cpu和 一个slave进行压力测试数据差不多。 1.刚开始的时候我以为是因为我用容器启动locust的关系,然后在云主机上直接安装locust,发现结果没有改变。所以就排除了容器的问题。
2.本来我是没有做测试接口1的,因为我觉得测试接口2的数据和我想的不一样,会不会应该延迟的关系,所以我才加了测试接口1,但是加了以后,我发现测试接口1的数据和我预想的是一致的,那么在locust的使用上我没有出问题。
3.那么问题是出在哪里,还是我对压力测的概念没有理解透彻?
4.我现在在尝试用jmeter进行测试,这个非GUI的还真的要稍微花点时间,不知道在我能够在liunx上熟练使用jmeter的时候,是否有人能帮忙指点一下。 |