压力测试-Jmeter

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

一、Jemter的安装

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

压力测试-Jmeter_第1张图片

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

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

1、新增线程组

压力测试-Jmeter_第2张图片

压力测试-Jmeter_第3张图片

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

2、构建http取样器

压力测试-Jmeter_第4张图片

 压力测试-Jmeter_第5张图片

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

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

压力测试-Jmeter_第6张图片

4、补充知识点:计数器

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

压力测试-Jmeter_第7张图片

 

压力测试-Jmeter_第8张图片

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

使用方法:${studentId}

压力测试-Jmeter_第9张图片

结果:

压力测试-Jmeter_第10张图片

 

5、读取csv文件

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

压力测试-Jmeter_第11张图片

压力测试-Jmeter_第12张图片

压力测试-Jmeter_第13张图片

三、报告详解

看下我们第一次的的压测结果,压力测试-Jmeter_第14张图片

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

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

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

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

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

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

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

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

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

异常:接口异常的百分比

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

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

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

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

①:加缓存Redis

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

压力测试-Jmeter_第15张图片

③:加缓存EhCache

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

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

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

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

压力测试-Jmeter_第16张图片

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

Jmeter命令参数解释:

压力测试-Jmeter_第17张图片

 利用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=

修改控制机配置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

压力测试-Jmeter_第18张图片

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

五、Jmeter安装插件拓展功能

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

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

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

压力测试-Jmeter_第19张图片

压力测试-Jmeter_第20张图片

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

压力测试-Jmeter_第21张图片

压力测试-Jmeter_第22张图片

压力测试-Jmeter_第23张图片

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

我们需要安装PerfMon插件

 压力测试-Jmeter_第24张图片

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

压力测试-Jmeter_第25张图片

总结:

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

本次用到的软件:

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

你可能感兴趣的:(Jmeter压力测试,测试工具,压力测试)