接口性能测试+调优+性能指标

前言

在对一个web进行性能测试过程中,需要开发者掌握一些概念,例如性能测试,到底要测试什么?常见的测试指标有哪些?要怎么做调优?
这里分享一个案例。

案例

有一个接口,需要对上传文件进行分析,流程是上传一个zip文件,解压后进行校验,分析处理后,对文件进行签名,同时返回前也会验证签名一次,再进行zip压缩输出,返回到平台,有几个重要参数,例如,文件摘要值、对文件操作的算法。

zip操作简图

初步解析

这个案例看完后,从开发的角度上看,我们可能会思考,哪一些步骤会出现哪一些瓶颈,哪一个步骤需要采用什么角度来进行优化?
1)签名所用到的算法,对算法调优,或者降低安全性选用低运算的算法
2)上传大文件与下载大文件的网络传输,与本地文件多次读取的处理
3)多文件下,考虑zip的压缩与解压的调优处理
4)不考虑立即同步,是否可以采用异步调用的方式
5)web应用,tomcat容器对上传文件存放在临时文件,考虑减少IO读写
6)有哪些可以采用缓存的方式
7)JVM调优、有那些对象不需要每次都加载、处理…

签名算法

没整理好,待补充

网络传输

没整理好,待补充

zip的压缩与解压

经过压力测试,通过阿里的arthur工具包,发现在压缩与解压过程,耗时不逊于文件上传下载。
这里采用了not buffer copy、buffer copy、nio copy、nio mapped copy、nio pip copy这几种方式来对比压缩过程,文件流读取
zip压缩策略
代码迟点更新到github,待补充,各位看官稍安勿躁

异步调用

接口返回,就不采取同步了,而是提供一个返回的调用接口,执行完返回到这个回调接口,这种方式可以大大提升文件的并发吞吐量。
代码迟点更新到github,待补充,各位看官稍安勿躁

临时文件

考虑是web应用+内存,文件读取远远没那么简单,因为不可能完全让内存去直接对文件操作,所以需要将zip临时存放在服务器上,而不是内存上。
同时如果是tomcat,还会有临时目录处理上传文件,从接口上拿到的数据,并不是请求的数据,而是从tomcat临时文件中再一次获取的数据。
所以这里有居多的IO操作
1)tomcat从获取请求数据在临时文件夹(地址:tomcat.tmp.path);
2)接口获取临时文件位置的数据,存放在配置上指定的文件夹(地址:config.file.path);
3)解压文件,需要将这些files存放在又一个临时文件夹(地址:unzip.files.path);
4)对这一个个文件进行一次页面的签名,防止文件篡改,签完名,同时验证签名值存放临时文件夹(地址:sign.files.path);
5)接着通过unzip对签名文件进行压缩到一个临时文件夹(地址:sign.zip.path);
6)接口读取该地址返回。

需要改造的方向:
1)将tomcat默认的临时文件夹存放,通过springboot的配置改为制定配置的位置
如果是用springboot2.x.x,那么配置server.tomcat.basedir就行了
2)考虑响应式编程,对这个逻辑进行重新设计与重构,即解压一个文件,就立马消费(进行签名+验签),接着在准备压缩,一套流程走一起
… …
没整理好,待补充

  1. 从性能测试的角度上看,需要测试什么呢?吞吐量、一次请求的响应时间、并发用户数、还有资源使用率,其中资源使用率,例如有CPU的使用情况(算法处理与常规运算),内存使用率(保证足够大的空间能够对单个文件进行处理),磁盘IO的处理(文件读取与写入)

资源使用命令

介绍完以上的一些调优方案,这里介绍一些常用的常见的测试指标,来查看系统资源的命令(Linux)

CPU占用率

vmstat 3
# 查看cpu最后一项,记录us、sy、id的数据值
# us :用户进程消耗的CPU时间百分比
# sy : 内核进程消耗CPU时间百分比
# id : CPU处在空闲状态的时间百分比
# us+sy参考值为80%,如果大于80%,说明可能存在CPU资源不足的情况
# 综上所述,CPU性能评估中重点注意r、us、sy和id列的值。

vmstat查看CPU占用率

或者采用top命令,可以观察%CPU选项,输入数字1可进行排序

top查看CPU占用率

内存使用率

top
# 控制台上实时监控,查看Mem中从测试开始到测试各个阶段使用的内存有多大,MEM占比有多少,这里可以输入字母m来切换显示模式

free
# 不会实时监控,只测试一次

top查看内存使用率

free查看内存使用率

网络I/O

# eno1 为使用的端口
dstat -t -clmnsyr --tcp --net-packets -N eno1

dstat 查看网络IO变化

磁盘I/O

vmstat 3
# bi : 从块设备读入数据的总量,即读磁盘,单位kB/s
# bo : 写入到块设备的数据总量,即写磁盘,单位kB/s

vmstat 查看磁盘IO变化

使用iostat -d -x -k 1 2获取磁盘IO的数据变化情况

iostat 查看磁盘IO变化

未完待续,持续更新


性能测试工具

JMX的使用

配置JAVA或者是web容器里的JAVA_OPTS类似的参数,指定JMX的

Jstat的使用

Jmeter

可视化zabbix

jmeter虽然也可以看,但是效果不佳
可视化zabbix

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章