我们在开发的过程中,如果遇到系统预估访问量会比较大的时候,或者我们再做底层基础服务的时候,往往需要对我们的服务性能做一些压力测试和稳定性测试,市面上有很多压测工具,今天我们主要讲解的是Jmeter压力测试工具,鉴于最近做的一次项目正儿八经的做了一次压测,加上以前零零碎碎的学习,本次我打算总结一下。

一、Jemter的安装

我所下载的Jmeter是5.4版本的,解压过后进入bin目录,双击jmeter.sh,如图表示软件启动成功.

二、如何构建一个接口的压测脚本

接下来我们启动一个接口服务,新增压测脚本

1、新增线程组

创建100个线程,指定在1s内生成这全部100个线程,循环跑10次,整个压测跑下来执行接口请求1000次。

2、构建http取样器

输入采样器的名称、协议、服务器域名或者IP、端口号、Method及Url信息。

3、监听器里添加查看结果树(比较耗服务器性能,不需要可以不加)和聚合报告

4、补充知识点:计数器

上面的请求,我们的参数是写死的,但是多数时候,我们需要构建不同的参数,这个时候,如果没有规则,我们可以使用计数器。

新增一个计数器原件,引用名称studentId,从1开始到10000结束,步长为1.

使用方法:${studentId}

结果:

5、读取csv文件

有的时候,参数并不能像上面这样用一个计数器随便变量替代,而是必须是真实有效的数据,这个时候我们可以从数据库里先把数据拿出来,整理成csv格式,由Jmeter去读取.

三、报告详解

看下我们第一次的的压测结果,

本次的接口完全是通过mysql来提供数据的,没有做任何的缓存,性能是非常之差,我们详细解释下各个参数的意思.

样本:就是本次我们一共进行了多少次接口请求

平均值:就是接口的平均响应时间,单位是ms

中位数:就是接口响应时间的中位数,单位是ms

90%百分数:就是90%的接口响应时间不超过这个数值,单位是ms

95%百分数:就是95%的接口响应时间不超过这个数值,单位是ms

99%百分数:就是99%的接口响应时间不超过这个数值,单位是ms

最小值:接口的最小响应时间,单位是ms

最大值:接口的最大响应时间,单位是ms

异常:接口异常的百分比

吞吐量:单位时间(1s)的接口请求次数

接收:收到的千字节每秒的吞吐量测试

发送:发送的千字节每秒的吞吐量测试

接下来我们做三次性能优化

①:加缓存Redis

②:加缓存Redis且用protobuf序列化

③:加缓存EhCache

这样我们可以通过压测工具一步步测试我们程序优化的效果,最终达到我们要求的压测指标。

四、如何在服务器上跑压力测试

上述我们是在windows的界面开发下进行的压力测试,一般在公司里,我们会搭建专门的施压服务器,用于进行压力测试。

首先把我们的服务部署到服务器上去:

在压测服务器上需要安装jdk,配置Jmeter环境,上传apache-jmeter-5.4.tgz到服务器解压

Jmeter命令参数解释:

利用GUI工具编写测试计划,生成一个jmx文件(包括监控、聚合报告、tps、服务器资源监控等),上传到服务器。

执行JMeter文件:在Linux服务器中找到文件所在的目录,然后开始执行

jmeter -n -t /opt/test/获取学生信息.jmx -l result.jtl -e -o /opt/test/result

执行完毕后将jtl文件下载到本地,利用GUI工具可以查看压测结果。

Jmeter多机压测(分布式压测),在有些时候,我们的压测服务器单机产生的请求量不一定能够满足压测要求,这个时候我们需要开多台压测服务器协调。

分别在两台机器上安装jmeter软件,一台是控制机,一台是Agent节点

在Agent节点的jmeter.properties上修改 server.rmi.ssl.disable=true

启动Agent:jmeter-server -Djava.rmi.server.hostname=<Ip>

修改控制机配置jmeter.properties remote_hosts=121.36.136.241:1099

启动控制机: jmeter-server

执行压测脚本,多一个参数 -r 表示全部agent启动并参与测试

jmeter -n -t /opt/test/获取学生信息.jmx -r -l result.jtl -e -o /opt/test/result

在Agent节点上也会打印2行日志 

五、Jmeter安装插件拓展功能

Jmeter作为一个开源工具,相比一些商用工具(如LoadRunner),在功能上就稍显不足,好在Jmeter可以集成第三方插件来丰富功能。

插件下载地址:​​​​​​jmeter-plugins.org

下载plugins-manager.jar文件后,将其放入jmeter的安装目录的lib/ext目录下,重启jmeter

重启后,我们为压测脚本添加监听器可以用来监测接口响应时间和tps的变化情况:

在做压测的时候,我们除了关心接口性能的指标数据外,还有一点非常重要,我们也要时刻关注服务器资源的消耗情况,试想一下,如果服务器费了九牛二虎之力跑出了我们需要的性能指标,但是服务器消耗过大,随时都有宕机的风险,这样的压测结果没有任何意义,但是我们怎么监测服务器性能呢?如下:

我们需要安装PerfMon插件

同时我们在服务器也需要开启一个Agent

总结:

压力测试只能帮我们发现程序中的性能问题,但是它并不能帮我们解决问题,我们程序员除了要掌握压测的能力外,更重要的是优化程序的能力,包括但不限于数据库连接池调优、引入缓存、序列化调优、JVM调优、容器调优等,同时我们还需要不断监控服务器的CPU、内存、磁盘等硬件情况,我们要达到的目的是服务器能够在维持硬件资源正常工作的状态下,让我们的接口性能达到最优。

本次用到的软件:

链接:https://pan.baidu.com/s/1YajIPjQgqrtBNEtAvs-58A 
提取码:xdjl

压力测试-Jmeter相关推荐

  1. 压力测试-Jmeter自动化测试教程

    目录 Jmeter目录 1.Jmeter的安装与部署 1.1 环境要求 1.2 安装Jmeter 1.3 配置Jmeter环境变量 1.4 Jmeter的使用 手写自动化测试脚本(不建议用) 通过录制 ...

  2. 压力测试Jmeter+badboy

    压力测试Jmeter+badboy 前言:很多人都想学习压力测试,但是一开始手动写脚本着实蛋疼,所以今天我教大家的是利用badboy来录制压测脚本,然后用Jmeter来做压力测试. 流程:badboy ...

  3. 压力测试-Jmeter脚本录制方案

    使用Jmeter时在特殊场景下需要用到脚本录制的功能,本文将分享如何使用Jmeter进行脚本的录制及相关的注意事项. 准备工作: 创建基础API框架:新建测试计划-创建线程组-创建HTTP请求-创建查 ...

  4. 【高性能】Web性能压力测试JMeter、测试秒杀Red

    高性能问题 内容管理 JMeter web性能测试 JMeter配置原件 取样器 Sampler 配置原件 config Element 逻辑控制器 Logic Controller 前置处理器 Pr ...

  5. 压力测试-Jmeter测试移动APP

    如果刚刚入门Jmeter,请参考Jmeter测试教程-入门 jmeter资源包​​​​​​​ 首先,确保手机和电脑连接在同一个热点下(不是公共局域网) 进入win的cmd,输入ipconfig Jme ...

  6. jmeter json断言_Jmeter接口测试+压力测试

     jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要 ...

  7. jmeter压力测试linux,JMeter压力测试

    JMeter压力测试 整体目标: 安装虚拟机,并安装一套LAMP(Linux+Apache+Mysql+PHP)待测系统,推荐ECShop(http://www.ecshop.com),基于此进行Jm ...

  8. (转)使用JMeter进行Web压力测试

    使用JMeter进行压力测试 说到压力测试,一般第一反应都是LoadRunner.这个软件也确实是自动化测试的一个事实标准.无奈这个软件太过庞大,以及不能在MacOS上使用.我由于项目的需要,需要对一 ...

  9. Jmeter接口测试+压力测试

      jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先 ...

  10. jmetter持续时间_【转】Jmeter做web压力测试时设置持续时间注意点

    头一回使用jmeter做web的压力测试,遇到个很莫名其妙的问题,不管我的线程组怎么设置,它就是执行一次就结束了. 设置循环次数为300,不使用调度器--〉执行一次就结束了,循环次数未生效 设置循环次 ...

最新文章

  1. 软件工程(2019)第一次结对作业
  2. Elasticsearch搜索引擎:ES的segment段合并原理
  3. 四川一级计算机课程编码,四川省计算机一级考试真题
  4. 设计模式札记——单例模式(Singleton Pattern)
  5. 华为麒麟990芯片发布;谷歌宣布开源创新隐私保护技术;阿里20亿美元全资收购网易考拉;中国联通将设立100亿5G创新基金……...
  6. SpringCloud创建Config多客户端公共配置
  7. 我认为的android入门学习策略
  8. sql实现从两个表获取字段组成表数据再插入到函数表中
  9. android书籍和教程推荐--不断更新
  10. 开课吧:深入了解C++语言应用方向有哪些?
  11. php 递归穿件文件夹,PHP递归复制整个文件夹
  12. 如何将windows桌面默认位置修改为D盘
  13. PR期刊投稿要求(整体要求、Title page、Highlight)
  14. ps切图怎么做成html,PS切图怎么导出网页 PS切图怎么生成源代码
  15. 苹果笔记本安装系统显示英文的解决办法
  16. rhel7添加静态路由
  17. Matlab 仿真——直流电机速度控制(1)直流电机建模
  18. 据说这是国外最火的55套PS实用教程!
  19. OPPO跨越 “挑战者深渊”
  20. 012 Rust死灵书之分解借用

热门文章

  1. android 获取签名的md5值,获取Android MD5签名
  2. Dollars即时聊天客户端应用源码
  3. 刨根问底 | 红遍全网的SD-WAN,到底是个啥?
  4. 开心盒子助手3.0版|开心盒子助手工具3.0电脑版
  5. Excel永远不会消亡!
  6. 如何利用卡诺云系统管理早教机构?昆明收银系统还有此妙用!
  7. hdtune硬盘检测详解教程
  8. c语言布线编程问题,布线问题c语言实现代码.doc
  9. Linux驱动开发-编写FT5X06触摸屏驱动
  10. 芒果云 在线代码编辑器