身为后端程序员怎么也要会一点压力测试相关的技术吧, 不然无脑上线项目万一项目火了进来大量请求时出现程序执行缓慢, 宕机等情况你肯定稳稳背锅, 而且这个时候短时间内还没办法解决, 只能使用物理扩容CPU, 内存, 更换网络等几种方式来解决问题, 妥妥的为公司增加支出好吧, 下一个被开的就是你都是想跑路拿高薪的打工仔, 身上怎么可以背负污点, 赶紧学一手压力测试进行保命, 我先学为敬。
本篇文章主打一个学完就会, 奥利给!
性能调优对各个开发岗位的区别
各个岗位对性能调优的关键节点
首屏时间: 初次访问项目等待加载时间
白屏时间: 刷新页面到数据全部展示时间
可交互时间
完全加载时间
RT: 响应时间
TRS: 每秒事务数
并发数: 这应该不会解释了吧
端到端相应时间
Crash率
内存使用率
FPS
前端工程师:
后端工程师:
移动端工程师
影响性能的关键要素
产品逻辑
功能交互
动态效果
页面元素
架构不合理
研发功底和经验不足
没有性能意识: 只实现功能不注重代码性能, 当业务上量后系统出现连锁反应, 导致性能问题增加
数据库: 慢查询, 过多查询, 索引使用不当, 数据库服务器瓶颈
设备类型&性能
系统版本
网络(WiFi, 2G, 3G, 4G, 5G)
硬件及云服务(服务器硬件, CPU, 内存..)
产品设计
基础网络
代码质量&架构
用户移动端环境
1.1压力测试是什么
1.2压力测试的目的
1.3压力测试的指标
指标 | 含义 |
相应时间(RT) | 是指系统对请求作出响应的平均时间, 对于单用户的系统, 响应时间可以很好地度量系统的性能 |
吞吐量(Throughput) | 是指系统在单位时间内处理的数量, 每秒事务数TPS 也算是吞吐量的一种 |
资源利用率 | CPU占用率, 内存使用率, 系统负载, 网络IO |
并发用户数 | 是指系统可以同时承载的正常使用系统功能的用户的数量, 用户不同的使用模式会导致不同用户在单位时间发出不同数量的请求 |
错误率 | 失败请求占比, 在测试时添加响应断言, 验证不通过即标记为错误, 若不添加, 响应码非200则为错误 |
上图充分的展示了响应时间, 吞吐量, 利用率和并发用户数之间的关系。
随着并发用户的增加经过轻负载区, 达到最优并发数, 此时利用率高,吞吐量高, 响应时间短。
但是如果用户数继续增加, 就会到达重负载区, 此时性能最大化, 但是当超过某一临界值(最大并发数)之后, 响应时间会急剧增加, 利用率平缓, 吞吐量急速下降。
我们进行压测的目的主要就是测试出这个临界值的大小, 或者说, 我们系统当前能承受住的最大并发数。
老规矩, 先来一波软件介绍 JMeter是 Apache组织开发的基于 Java的开源压力测试工具, 具有体积小, 功能全, 使用方便等特点. 最初被设计用于 Web应用测试, 后来被扩展到其他测试领域.
Apache JMeter可视化的测试工具
LoadRunner 预测系统行为和性能的负载测试工具
Apache的 ab压力测试
nGrinder韩国研发的一款性能测试工具
PAS阿里测试工具
负载上升各项指标是否正常
发现性能短板
高并发下系统是否稳定
预估系统最大负载
常用压测工具:
压测目标:
2.1安装 JMeter
官网地址: jmeter.apache.org/
熟悉的download, 点他
开始下载(是真的慢)
解压之后进入 bin目录下, 双击 jmeter.bat, 就可以启动 JMeter了
上图可以看出, 在我们第一次打开界面时是英文的, 多少有点不友好, 接下来讲解一下怎么将语言更改为中文
2.2设置 JMeter界面为中文
还是我们的 bin目录下, 有一个 jmeter.properties文件
双击打开, 搜索 language
去除 #
号, 值更改为 zh_CN
, 保存文件然后重启软件(双击jmeter.bat)
可以看到, 我们的 jmeter成功更改为了中文界面, 这对于我这种英语白痴来说是很舒服的
2.3初步使用 JMeter
我们先随便创建一个测试用例, 就是简单测试, 同时讲解一下常用的参数
本次测试采用 20线程, 1秒启动时间, 循环100次, Get请求
持续时间: 该任务执行的时间
启动延迟: 等待多少秒开始执行
线程数: 虚拟的用户数, 一个用户占一个线程
Ramp-Up: 等待时间, 设置的虚拟用户(线程数)需要多长时间全部启动
循环次数: 单个线程发送请求的次数
调度器:
右键线程组-添加HTTP请求
这个中文讲解的很明白, 应该都看得懂的, 有疑问的评论区留言
线程组右键-添加-监听器-查看结果树
执行结果分析(启动之后显示界面)
列表列出了每一次的HTTP请求, 绿色的是成功, 红色的话就是失败
Thread Name:线程组名称
Sample Start: 启动开始时间
Load time:加载时长
Latency:等待时长
Size in bytes:发送的数据总大小
Headers size in bytes:发送数据的其余部分大小
Sample Count:发送统计
Error Count:交互错误统计
Response code:返回码
Response message:返回信息
Response headers:返回的头部信息
取样器结果参数详解
基本数据
入参
请求头
响应码
响应头
请求
相应数据
线程组右键-添加-监听器-聚合报告
执行结果分析(启动之后界面)
参数解释
样本: 并发量
平均值: 接口请求用时(单位毫秒)
中位数: 请求用时中位数(单位毫秒), 例如2000请求以请求时间排序, 排名1000的用时时长
90%百分位, 95%百分位, 99%百分位和中位数同理
最小, 最大值: 请求用时最小和最大
异常% : 请求中异常的百分比
吞吐量: 单位时间内请求次数
线程组右键-添加-监听器-图形结果
执行结果分析(启动之后显示界面)
样本数目:总共发送到服务器的请求数。
最新样本:代表时间的数字,是服务器响应最后一个请求的时间。
吞吐量:服务器每分钟处理的请求数。
平均值:总运行时间除以发送到服务器的请求数。
中间值:有一半的服务器响应时间低于该值而另一半高于该值。
偏离:表示服务器响应时间变化、离散程度测量值的大小。
断言主要用来判断结果返回是否符合预期
线程组右键-添加-断言-响应断言
假设我们接口的返回状态码字段为code
, 200为成功, 那么就可以在断言这里进行配置, 来判断请求是否成功
首先说明 JMeter是不支持插件的, 所以我们先要 JMeter的插件允许插件下载, 这句话多少有点拗口
网址: Install :: JMeter-Plugins.org
点击上图红框即可下载插件, 前面说过了 JMeter是 Java8开发的, 插件对应的也是一个 jar包
下好之后就可以放在 JMeter安装目录下的 lib/ext/ 下了, 具体下载页面也有说明
上述操作结束之后, 在选项
里面就可以看到插件中心Plugins Manager
弹出以下界面, 点击 Available Plugins搜索我们需要的插件Basic Graphs
和Additional Graphs
, 勾选上, 然后安装
Basic Graphs主要显示显示平均响应时间,活动线程数,成功/失败交易数等
Additional Graphs主要显示吞吐量,连接时间,每秒的点击数等
在安装成功之后, 在监听器
会相应的多出很多的 jc开头的, 这就代表安装成功了
在压测过程中, 我们需要实时了解服务器的CPU, 内存, 网络, 服务器负载等情况的变化, 这个时候我们就需要对我们的 Linux系统进行监控, 通常来讲, 我们查询 Linux系统的资源占用情况可以使用以下几种方法
使用命令: top, iostat, iotop等
使用 Linux远程连接工具 FinalShell等
宝塔
JMeter压测工具 PerfMon
在 JMeter中, 如果需要监控服务器硬件, 那么我们还需要安装 PerfMon插件
PerfMon监控服务器硬件,如CPU,内存,硬盘读写速度等
进入下述地址开始下载监控包: github.com/undera/perf…
下载好之后我们可以直接解压放到服务器上, 会看到有两个startAgent
文件, 分别是Windows
系统和Linux
系统的启动脚本
我们直接启动就可以了, 如果脚本启动连接不上的话可以考虑更改脚本内容
例: Linux系统脚本更改为以下内容
启动成功之后, 脚本同级路径下会多出 log.log
的日志文件
然后我们就可以配置 JMeter了, 线程组-监听器-jp@gc - PerfMon Metrics Collector
我是在本地启动了ServerAgent.bat
进行测试, 执行结果如下所示:
具体的配置指标信息建议看官方文档, 太多了.... github.com/undera/perf…
Windows系统配置好ServerAgent
启动之后窗口闪退可能是 jre版本问题, 可以从下面的链接下载老版的 jre
www.aliyundrive.com/s/Yzw3DZ74w…
下载好之后, 建议安装目录设置在ServerAgent/jre
下
并更改startAgent.bat
脚本, cd 到老版本 jre路径
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 1150305204,里面有各种测试开发资料和技术可以一起交流哦。