在云服务上做接口压测心得总结
最近在某云服务上做了一次接口压测,发现了许多需要注意的点,整理一下,备忘。在下非专业测试人员,欢迎指正:
一、基准环境准备
准备一套知根知底基准的环境,用于和云服务上的虚机做对比,让自己可以做到心中有数。可以是虚机。注意两套环境尽量保持一样的基本配置,如cpu性能、内存大小。
二、测试工具准备
压测应该从基准测试开始,分三个维度展开。
硬件基准测试:主要包括CPU性能、内存读写性能、磁盘读写性能、网络读写性能和带宽,可选的工具如sysbench、fio等
中间件基准测试:如redis、kafka、mysql等,此类中间件网上基本可以通过关键字【中间件名 benchmark】搜到对应的工具
框架和业务程序压测:框架即所用到的研发框架,程序代码剥离了业务处理后的部分。这里我们主要是http方式访问的接口,用到的主要是jmeter、Apache Benchmark、wrk
其中前两个基准测试主要用来调整硬件环境,发现可能存在的环境问题;框架压测可以用来发现研发框架的一些潜在性能问题。
三、测试方法和注意事项
1、关注服务端:压测是为了找出瓶颈,这个瓶颈可以是cpu的性能(计算)、网络和磁盘(IO)性能等环境上的,也可以是程序的业务逻辑上的。不论如何,压测时一定要将服务端的硬件使用情况监控起来
2、关注客户端:压测时注意客户端的资源如cpu、带宽等是否已经到了上限,如果到了上限应该及时提升配置,或者做客户端集群(jmeter集群需要大量的带宽用来同步每个agent的压测结果,需要格外注意),最后,还要特别留意你的客户端脚本性能有没有问题。
3、关注程序业务逻辑:对于业务程序,首先需要梳理接口的整体逻辑,比如在什么情况下进行了几次IO
4.1、善用排除法为结论背书:排除法也是压测过程中一个重要的手段,如果基本推断到某个地方非常影响性能,可以通过一些手段跳过这个地方的执行,看看性能是否能上来,以此证明你的结论。
4.2、为你的想法背书,而非想当然:
比如,对于网络——如果你认为你压测过程中使用的是HTTP长连接(keepalive),那么你关注服务端和客户端的各种状态的TCP连接数,确定真的是长连接;
比如,如果你认为硬件越多性能越高,那一定要通过压测证明一下,如,同时A压B,C压D,两个压测结果的和是不是单独A压B的两倍
另外,有一些东西是公论则可以不必去费功夫,因为已经有很多人在很多文章中为你背书了——比如kafka的磁盘顺序写等。
5、确保压测环境不被干扰:在云服务上压测,请确定你的服务器资源是独享型,否则压测基本没有什么意义。
6、压测报告务必详细:压测报告不只是给别人看的,更是你自己的工作证明,要详细的罗列用到的硬件,什么环境,压测过程中各个指标的状态,在各种参数情况下程序的吞吐量,压测报告直接反应了一个人的能力,因为你能力越强,你看到的关键参数越多。
打个比方,从前我只关心cpu和内存,所以我做的压测报告里会有这些数据;后来我了解了HTTP长短连接的区别、网络等知识,报告内容有所增加;再后来我发现磁盘也会成为某些程序的瓶颈,磁盘IO也成了压测报告中的内容……
四、一些主观观点
1、压测以及压测结果分析非常考验一个人的综合能力,包括知识面、分析问题的能力、对整体架构的掌握程度以及对用到的各个中间件的原理的掌握等,绝非简单跑个脚本就完事。
2、我相信在压测这个事上,不管一个人的能力多么强都是不够强的,知识多么多都是不够用的,一定要量力而为。
3、只要通过一定的努力,提高了程序的性能,那就是有效果的,如果追求完美那么时间多半是不够用的。
(实战内容有时间再补充吧,完毕)
补充,实践得出的真知:
一个系统的吞吐,取决于用到的所有中间件的基准测试得出的吞吐能力的最小值,并且不会达到这个最小值。
得出结论,一定要有证据支撑。
2020年10月23日补充
网络延迟在一些同步阻塞场景下,也会对性能造成比较大的影响,现象就是cpu、磁盘、带宽等 都没有达到瓶颈,但是性能却上不去,这种,只能提高并发数来提高利用率。
2020年10月24日
java,c和redis
客户端:对于一个连接java每秒能发的请求数量和c发请求的能力不一样
服务端:redis连接数越多性能越低
所以当客户端java向服务端redis发请求时,连接数存在一个最优值,高或者低性能都不是最高点
所以redis-benchmark和jedis压测结果不一致
相关文章
- 频繁调用接口的问题
- Java面向对象高级--抽象类与接口的应用
- ASP.NET WebApi服务接口如何防止重复请求实现HTTP幂等性
- instanceof判断的对象可以是接口
- EasyNVR摄像机网页H5全平台无插件直播流媒体播放服务二次开发之接口鉴权示例讲解
- python接口自动化5-Json数据处理
- 利用接口调用服务中特定的方法
- spring boot编写并运行HelloWorld服务接口
- Livy安装使用(Spark rest接口服务工具)
- 【结果很简单,过程很艰辛】记阿里云Ons消息队列服务.NET接口填坑过程
- atitit 短信接口规范与短信解决方案.docx
- C# 接口、抽象类
- 云图说|华为云自研云数据库GaussDB NoSQL,兼容多款NoSQL接口的数据库服务
- 【华为云实战开发】12.如何在云端快速开展Swagger接口测试
- vue 音乐App QQ音乐搜索列表最新接口跨域设置
- 应用层接口服务
- 经常使用的webservice接口
- 记一次接口压力测试与性能调优
- 【2023最全教程】Python接口测试实战之接口测试工具的使用(建议收藏)
- 一文get,最容易碰上的接口自动化测试问题汇总
- 包含了访问命名服务的类和接口
- ASP.NET Core微服务(四)——【静态vue使用axios解析接口】
- ASP.NET Core微服务(七)——【docker部署linux上线】(RDS+API接口测试部分)
- C#中的接口
- 接口测试——电商网站接口测试实战(四)
- Python接口自动化——Web接口(2-2)