前语

身为后端程序员怎样也要会一点压力测验相关的技术吧, 否则无脑上线项目万一项目火了进来大量恳求时呈现程序履行缓慢, 宕机等状况你必定稳稳背锅, 并且这个时分短时刻内还没办法解决, 只能运用物理扩容CPU, 内存, 替换网络等几种方式来解决问题, 妥妥的为公司增加开销好吧, 下一个被开的便是你

都是想跑路拿高薪的打工仔, 身上怎样能够背负污点, 赶紧学一手压力测验进行保命, 我先学为敬

本篇文章主打一个学完就会, 奥利给

文中呈现软件的版别

  • JMeter: 5.5
  • ServerAgent: 2.2.3

功用调优对各个开发岗位的区别

各个岗位对功用调优的要害节点

  • 前端工程师:
    • 首屏时刻: 初次访问项目等候加载时刻
    • 白屏时刻: 改写页面到数据悉数展现时刻
    • 可交互时刻
    • 完全加载时刻
  • 后端工程师
    • RT: 呼应时刻
    • TRS: 每秒业务数
    • 并发数: 这应该不会解释了吧
  • 移动端工程师
    • 端到端相应时刻
    • Crash率
    • 内存运用率
    • FPS

首要讲一下后端工程师(Java), 毕竟这是吃饭的家伙
对于后端工程师来说, 影响功用的当地首要有两个

  • 数据库读写, RPC, 网络IO, 代码逻辑复杂度, 缓存
  • JVM(Throughput) – JVM(Throughput)

影响功用的要害要素

  • 产品规划
    • 产品逻辑
    • 功用交互
    • 动态效果
    • 页面元素
  • 根底网络
  • 代码质量&架构
    • 架构不合理
    • 研发功底和经验不足
    • 没有功用意识: 只实现功用不重视代码功用, 当业务上量后体系呈现连锁反应, 导致功用问题增加
    • 数据库: 慢查询, 过多查询, 索引运用不当, 数据库服务器瓶颈
  • 用户移动端环境
    • 设备类型&功用
    • 体系版别
    • 网络(WiFi, 2G, 3G, 4G, 5G)
    • 硬件及云服务(服务器硬件, CPU, 内存..)

1. 开端了解压力测验

1.1压力测验是什么

压力测验是针对特定体系或组件, 为要承认其稳定性而特意进行的严厉测验. 会让体系在超越正常运用条件下运作, 然后再承认其成果
对体系不断施加压力, 来预估体系`负载才能`的一种测验
一般来说, 只有在体系根底功用测验验证完结, 体系趋于稳定的状况下, 才会进行压力测验

1.2压力测验的意图

当负载主键增加时, 观察体系各项功用方针的改变状况是否有反常
发现体系的功用短板, 进行针对性的功用优化
判别体系在**高并发状况下是否会报错**, 进行是否会挂掉
测验在体系某个方面抵达瓶颈时, 粗略估量体系功用上限

1.3 压力测验的方针

方针 意义
相应时刻(RT) 是指体系对恳求作出呼应的均匀时刻, 对于单用户的体系, 呼应时刻能够很好地度量体系的功用
吞吐量(Throughput) 是指体系在单位时刻内处理的数量, 每秒业务数TPS 也算是吞吐量的一种
资源利用率 CPU占用率, 内存运用率, 体系负载, 网络IO
并发用户数 是指体系能够同时承载的正常运用体系功用的用户的数量, 用户不同的运用模式会导致不同用户在单位时刻宣布不同数量的恳求
过错率 失利恳求占比, 在测验时增加呼应断语, 验证不通过即标记为过错, 若不增加, 呼应码非200则为过错

评判体系功用, 首要考虑三个功用方针 RT, TPS, 资源利用率

手把手教你压测

上图充沛的展现了呼应时刻, 吞吐量, 利用率和并发用户数之间的联系

跟着并发用户的增加通过轻负载区, 抵达最优并发数, 此刻利用率高,吞吐量高, 呼应时刻短

但是假如用户数继续增加, 就会抵达重负载区, 此刻功用最大化, 但是当超越某一临界值(最大并发数)之后, 呼应时刻会急剧增加, 利用率陡峭, 吞吐量急速下降

咱们进行压测的意图首要便是测验出这个临界值的巨细, 或者说, 咱们体系当前能承受住的最大并发数

2. 压力测验东西 JMeter

老规矩, 先来一波软件介绍 JMeter是 Apache安排开发的根据 Java的开源压力测验东西, 具有体积小, 功用全, 运用方便等特色. 最初被规划用于 Web应用测验, 后来被扩展到其他测验领域.

常用压测东西:

  • Apache JMeter可视化的测验东西
  • LoadRunner 猜测体系行为和功用的负载测验东西
  • Apache的 ab压力测验
  • nGrinder韩国研发的一款功用测验东西
  • PAS阿里测验东西

压测方针:

  • 负载上升各项方针是否正常
  • 发现功用短板
  • 高并发下体系是否稳定
  • 预估体系最大负载

2.1 装置 JMeter

写在前面, 需求 Java8环境, 没有的话需求去装置, 教程百度上一大堆

官网地址: 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恳求

2.3.1 创立线程组

手把手教你压测

手把手教你压测

  • 线程数: 虚拟的用户数, 一个用户占一个线程
  • Ramp-Up: 等候时刻, 设置的虚拟用户(线程数)需求多长时刻悉数发动
  • 循环次数: 单个线程发送恳求的次数
  • 调度器:
    • 持续时刻: 该使命履行的时刻
    • 发动延迟: 等候多少秒开端履行

2.3.2 创立 http恳求

右键线程组-增加HTTP恳求

手把手教你压测

这个中文解说的很理解, 应该都看得懂的, 有疑问的谈论区留言

手把手教你压测

2.3.3 成果树

成果树, 聚合陈述, 图形成果只有新增, 解释在测验

线程组右键-增加-监听器-检查成果树

手把手教你压测

手把手教你压测

履行成果剖析(发动之后显现界面)

手把手教你压测

列表列出了每一次的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:回来的头部信息
  • 恳求
    • 基本数据
    • 入参
    • 恳求头
  • 相应数据
    • 呼应码
    • 呼应头

2.3.4 聚合陈述

线程组右键-增加-监听器-聚合陈述

手把手教你压测

履行成果剖析(发动之后界面)

手把手教你压测

参数解释

  • 样本: 并发量
  • 均匀值: 接口恳求用时(单位毫秒)
  • 中位数: 恳求用时中位数(单位毫秒), 例如2000恳求以恳求时刻排序, 排名1000的用时时长
  • 90%百分位, 95%百分位, 99%百分位和中位数同理
  • 最小, 最大值: 恳求用时最小和最大
  • 反常% : 恳求中反常的百分比
  • 吞吐量: 单位时刻内恳求次数

2.3.5 图形成果

线程组右键-增加-监听器-图形成果

手把手教你压测

履行成果剖析(发动之后显现界面)

手把手教你压测

  • 样本数目:一共发送到服务器的恳求数。
  • 最新样本:代表时刻的数字,是服务器呼应最后一个恳求的时刻。
  • 吞吐量:服务器每分钟处理的恳求数。
  • 均匀值:总运行时刻除以发送到服务器的恳求数。
  • 中心值:有一半的服务器呼应时刻低于该值而另一半高于该值。
  • 违背:表示服务器呼应时刻改变、离散程度测量值的巨细。

2.3.6 断语

断语首要用来判别成果回来是否符合预期

线程组右键-增加-断语-呼应断语

手把手教你压测

手把手教你压测

假设咱们接口的回来状态码字段为code, 200为成功, 那么就能够在断语这里进行装备, 来判别恳求是否成功

手把手教你压测

3. JMeter插件

3.1 插件装置

首要阐明 JMeter是不支持插件的, 所以咱们先要 JMeter的插件允许插件下载, 这句话多少有点拗口

网址: Install :: JMeter-Plugins.org

手把手教你压测

点击上图红框即可下载插件, 前面说过了 JMeter是 Java8开发的, 插件对应的也是一个 jar包

手把手教你压测

下好之后就能够放在 JMeter装置目录下的 lib/ext/ 下了, 具体下载页面也有阐明

手把手教你压测

上述操作结束之后, 在选项里面就能够看到插件中心Plugins Manager

手把手教你压测

弹出以下界面, 点击 Available Plugins查找咱们需求的插件Basic GraphsAdditional Graphs, 勾选上, 然后装置

手把手教你压测

Basic Graphs首要显现显现均匀呼应时刻,活动线程数,成功/失利交易数等

手把手教你压测

Additional Graphs首要显现吞吐量,连接时刻,每秒的点击数等

手把手教你压测

在装置成功之后, 在监听器会相应的多出许多的 jc最初的, 这就代表装置成功了

我运用的是 5.5版别的, 之前版别装置之后好像要手动重启, 5.5装置完会自动重启

手把手教你压测

4. Linux硬件监控

在压测过程中, 咱们需求实时了解服务器的CPU, 内存, 网络, 服务器负载等状况的改变, 这个时分咱们就需求对咱们的 Linux体系进行监控, 一般来讲, 咱们查询 Linux体系的资源占用状况能够运用以下几种办法

  • 运用命令: top, iostat, iotop等
  • 运用 Linux远程连接东西 FinalShell等
  • 浮屠
  • JMeter压测东西 PerfMon

在 JMeter中, 假如需求监控服务器硬件, 那么咱们还需求装置 PerfMon插件

手把手教你压测
PerfMon监控服务器硬件,如CPU,内存,硬盘读写速度等

进入下述地址开端下载监控包: github.com/undera/perf…

手把手教你压测

下载好之后咱们能够直接解压放到服务器上, 会看到有两个startAgent文件, 分别是Windows体系和Linux体系的发动脚本

手把手教你压测

咱们直接发动就能够了, 假如脚本发动连接不上的话能够考虑更改脚本内容

例: Linux体系脚本更改为以下内容

## 默许发动运行 startAgent.sh 脚本即可
## 服务发动默许4444端口,底子连接不上,因而自己创立一个布置脚本文件对此进行布置,且把端口修改为7879
nohup java -jar ./CMDRunner.jar --tool PerfMonAgent --udp-port 7879 --tcp-port 7879 > log.log 2>&1 &
## 赋予可履行权限
chmod 755 startAgent.sh

发动成功之后, 脚本同级途径下会多出 log.log的日志文件

手把手教你压测

然后咱们就能够装备 JMeter了, 线程组-监听器-jp@gc – PerfMon Metrics Collector

手把手教你压测

手把手教你压测

我是在本地发动了ServerAgent.bat进行测验, 履行成果如下所示:

手把手教你压测

注: 文件有必要装备, 否则没有图像

具体的装备方针信息主张看官方文档, 太多了…. github.com/undera/perf…

手把手教你压测

手把手教你压测

ServerAgent闪退问题

Windows体系装备好ServerAgent发动之后窗口闪退可能是 jre版别问题, 能够从下面的链接下载老版的 jre

www.aliyundrive.com/s/Yzw3DZ74w…

下载好之后, 主张装置目录设置在ServerAgent/jre

手把手教你压测

并更改startAgent.bat脚本, cd 到老版别 jre途径

手把手教你压测




本文内容到此结束了

如有收成欢迎点赞保藏关注✔️,您的鼓励是我最大的动力。

如有过错❌疑问欢迎各位大佬指出。

我是 宁轩 , 咱们下次再见

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。