前言

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

案例

有一个接口,需要对上传文件进行分析,流程是上传一个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这几种方式来对比压缩过程,文件流读取

代码迟点更新到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列的值。

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

内存使用率

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

网络I/O

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

磁盘I/O

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

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

未完待续,持续更新


性能测试工具

JMX的使用

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

Jstat的使用

Jmeter

可视化zabbix

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

接口性能测试+调优+性能指标相关推荐

  1. 性能测试调优篇---未完待续

    性能测试调优一: 1.首先,看下选测交易的整个走向 纯系统内部交易: 选测交易如果是系统内的交易,每一步请求都和系统交互几次,访问了几个数据库,访问了数据库的那几张表?? 该交易走了那几台机器,这几台 ...

  2. mysql时间复杂度o的n次方_MySQL性能测试调优

    MySQL性能测试调优 操作系统 基本操作 查看磁盘分区mount选项 $ mount 永久修改分区mount选项(系统重启后生效) 修改文件 /etc/fstab 中对应分区的mount optio ...

  3. 压测工具BenchmarkSQL对OceanBase开源版3.1.2性能测试调优

    作者:马顺华 从事运维管理工作多年,目前就职于六棱镜(杭州)科技有限公司,熟悉运维自动化.OceanBase部署运维.MySQL 运维以及各种云平台技术和产品.并已获得OceanBase认证OBCA. ...

  4. 面试篇------性能测试+调优

    记录下来自己的学习经验,供各位共勉. 1关于性能测试的种类: 负载测试:loadtesting 针对程序和服务器数据库在固定情况下的最大用户数和并发量的响应时间和资源利用率 压力测试:stress t ...

  5. 性能测试调优JVM调优(三)之JMeter使用

    本文章向大家介绍JVM调优(三)之JMeter使用,主要包括JVM调优(三)之JMeter使用使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. JMete ...

  6. 软件测试方法进行调优,性能测试调优过程

    对于一个开发比较成熟的业务系统而言,功能相对已经完善,但在大业务量的情况下往往会出现各种异常.对此,需通过对系统进行配置修改或者产品框架调整来优化系统.在优化系统过程中,最有效的手段就是对系统做性能测 ...

  7. 性能测试常见瓶颈分析及调优方法

    性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库.从操作系统(CPU调度,内存管理,进程调度,磁盘I/O).网络.协议(HTTP, TCP/IP ),还是从应用程序代码,数据库调优,中间件配 ...

  8. 性能测试分析与调优原理

    最近一直纠结性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库.从操作系统(CPU调度,内存管理,进程调度,磁盘I/O).网络.协议(HTTP, TCP/IP ),还是从应用程序代码,数据库调 ...

  9. 【虫师--系列20】性能测试知多少---性能分析与调优的原理

    转自: http://www.cnblogs.com/fnng/archive/2013/03/19/2970315.html   作者:虫师 最近一直纠结性能分析与调优如何下手,先从硬件开始,还是先 ...

  10. 如何进行性能测试的调优

    如何进行性能测试调优: 性能:一个软件在不同负载下的表现.压力测试只是性能测试的一种.在某个负载情况下软件达到最优.性能调优---程序的调优. 1.程序的调优(架构的调优,架构下每一个程序的调优)-- ...

最新文章

  1. 全能音乐助手序列号_颜控最爱的全能本 惠普星14全能轻薄本深度解析
  2. 《HTML5与CSS3实例教程》
  3. ngrx里StoreModule.forFeature(‘example‘, reducers)运行时的数据结构
  4. 解决表单提交的数据丢失问题
  5. MATLAB报错Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image
  6. web mysql 界面表命名规范_MySql数据库表字段命名及设计规范
  7. 百度AI开发者大会百度大脑论坛:详解“多模态深度语义理解”
  8. java日期大小比较
  9. docker run后台启动命令_Docker命令-docker run
  10. 与卿共赴鸿蒙是什么意思,经典的爱情诗句
  11. Modern Radar for Automotive Applications(用于汽车应用的现代雷达)
  12. 基于SSM框架社交媒体实现
  13. OSPFv2原理详解(基于RFC2328)+配置介绍+RFC2328翻译
  14. tf 加速训练,节省内存 fit_generator
  15. 计算机如何性能测试,计算机性能测试
  16. mysql季度第一天_mysql 获取季度的第一天 本月的第一天,本周的第一天sql语句(转)...
  17. 【FPGA】解决vivado工程版本兼容问题
  18. 传智播客java就业班入学测试题(自测+答案)
  19. canvas实现刮刮卡
  20. DS007-队列的原理-操作受限的线性表-queue的使用

热门文章

  1. 微信小程序 防连点时间_微信小程序如何避免按钮多次点击重复触发事件
  2. windows10 快捷代码
  3. 为什么要使用版本管理
  4. 删除android电视软件下载,【教程】无需root!卸载小米电视/盒子内置应用竟如此简单...
  5. 基于 HPSocket , 实现 socket 通讯
  6. 简述:bs和cs的区别
  7. gs地图开发_中国地图全图高清版大图审图号GS(2016)2923号
  8. 微信小程序开发批量推送服务通知
  9. 第007篇:易康(eCognition)中实现分类的继承
  10. 如何编译运行opencv的sample