性能压测Jmeter基本介绍

首先附上apache-jmeter-5.4.1安装包(官网下载有点慢哈)链接: https://pan.baidu.com/s/1s7FQRfRPHsCXTKz9KyQQJg 提取码: fvnf

一.jemeter安装使用

1.将压缩包解压后在bin目录运行jmeter.bat设置语言国际化
在这里插入图片描述
2.在默认的测试计划中创建测试线程组
在这里插入图片描述
3.
3.在刚创建的线程组下添加取样器测试HTTP请求
在这里插入图片描述

GET请求

压力测试的接口
在这里插入图片描述
4.在线程组下添加监听器用于查看压测接口的相关指标报告
在这里插入图片描述

在这里插入图片描述
5.启动压测线程组
在这里插入图片描述
保存测试计划,方便下次直接运行
在这里插入图片描述
6.压测结束后查看压测指标报告
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7.清除全部指标报告,测试你自己写的接口吧
在这里插入图片描述
在这里插入图片描述

POST请求

post内容编码设置
在这里插入图片描述

请求头管理
在这里插入图片描述
*备注:出现中文乱码解决方案

方案一

  • 进入Jmeter的bin目录下,找到jmeter.properties文件,以文本形式打开

  • 找到sampleresult.default.encoding这个参数,此行默认是注释的(同时可以看到默认编码格式为ISO-8859-1)

  • 复制此行将注释去掉,并将编码格式设置为UTF-8

  • 重启jmeter生效(一定要重启)
    在这里插入图片描述

方案二

或者在http请求中添加后置处理器输入 prev.setDataEncoding(“UTF-8”); 设置请求编码格式:
在这里插入图片描述
在这里插入图片描述

二.性能监控jvisualvm使用

通过对某个接口的压力测试可以得到这个接口的性能报告,然后通过这个报告可以衡量这个接口符不符合我们当前的要求,如果不符合性能要求,就需要对接口进行性能优化!
1.影响性能考虑点包括:
1).首先要考虑自己的应用是属于cpu密集型还是io密集型
2).①数据库②应用程序③中间件(nginx getway Tomcat…)④网络和操作系统等方面
2.在使用jvisualvm前需要先了解关于jvm的堆内存和垃圾回收机制
1)jvm内存模型
在这里插入图片描述
2)堆:所有对象实例以及数组都要在堆上分配,推是垃圾收集器主要管理的区域也被称为GC;堆也是最多考虑需要优化的地方
推可以细分为:

  • 新生代
    • Eden空间
    • From Survivor空间
    • To Survivor空间
  • 老年代
  • 永久代/元空间
    • java8以前永久代受jvm管理,java8以后元空间,直接使用物理内存,因此默认情况下元空间的大小受本地内存限制

3)垃圾回收gc
在这里插入图片描述

3.进入cmd键入jvisualvm指令进入jvm监控台
在这里插入图片描述
1)安装visual GC插件垃圾回收监控台
点击工具–>插件
在这里插入图片描述

选中点击左下角的安装即可(我这里已经安装过了),安装完成以后退出监控台重新进入插件即可生效
在这里插入图片描述
2)jvisualvm能干什么?
检测内存泄漏,跟踪垃圾回收,执行时内存,cup分析,线程分析
在这里插入图片描述

  • 运行:正在运行的
  • 休眠:sleep
  • 等待:wait
  • 驻留:线程池里面的空闲线程
  • 监视:阻塞的线程,正在等待锁

三.优化中间件对性能的影响

1.压测nginx
1)访问虚拟机上的nginx默认首页
在这里插入图片描述
2)docker stats 查看cpu使用率内存等
在这里插入图片描述
3).开始压测
在这里插入图片描述
压测进行时的nginx的cpu使用情况:发现比较浪费cpu内存占用很低, 因为他主要需要更多的线程去处理请求,cpu要来回在线程之间切换计算
在这里插入图片描述
从压测指标报告中可以得出:
在这里插入图片描述
在这里插入图片描述
2.压测网关
1)
1)可以看出网关也比较浪费cpu,网关功能和nginx基本是差不多的
在这里插入图片描述
2)如果eden space的大小改变,gc时间减少,就又会将吞吐量提升
在这里插入图片描述
3)指标报告
在这里插入图片描述
3.压测简单服务
1)写一个简单服务,没有页面渲染,也不操作数据库

@ResponseBody
@GetMapping("/hello")
public String hello(){
    return "hello";
}

在这里插入图片描述
2)开始压测
在这里插入图片描述
3)指标报告
在这里插入图片描述
在这里插入图片描述
4.压测gateway+简单服务
1)现在想看Gateway加简单服务的压测,gateway除了映射/api/product 以外,还来映射/hello请求,因为不是api请求,也不用截串

- id: product_route
  uri: lb://gulimall-product
  predicates:
    - Path=/api/product/**,/hello    
  filters:
    - RewritePath=/api/(?<segment>/?.*), /$\{segment}

在这里插入图片描述
2)开始压测
在这里插入图片描述
3)指标报告
在这里插入图片描述
5.压测nginx+gateway+简单服务
在这里插入图片描述
1)开始压测
在这里插入图片描述
2)指标报告
在这里插入图片描述
压测到这里可以得出一个结论:中间件越多,性能损失越大,大多都损失到网络交互了

6.压测首页渲染
在这里插入图片描述
1)开始压测
在这里插入图片描述
2)指标报告
在这里插入图片描述
7.压测首页渲染(开启thymeleaf缓存)
1)在配置文件中开启thymeleaf缓存,重启服务
在这里插入图片描述
2)压测指标报告,可以看出开启缓存可以提高吞吐量
在这里插入图片描述
8.压测首页渲染(开缓存/优化数据库/关日志)
1)在配置文件中开启thymeleaf缓存并关闭日志打印,重启服务

# 开启thymeleaf缓存
  thymeleaf:
    cache: true

#设置日志级别,打印出SQL语句
logging:
  level:
    com.atguigu.gulimall.product: error

2)优化数据库-创建索引
在这里插入图片描述
3)指标报告
在这里插入图片描述
可以看出吞吐量进一步提升!

9.压测首页渲染全部数据(开缓存/优化数据库/关日志)
1)开始压测
在这里插入图片描述
首页渲染全部数据–html中引入的全部静态资源
在这里插入图片描述2)指标报告
在这里插入图片描述
在这里插入图片描述
由此可见主要慢在了静态资源上!静态资源的请求占用了Tomcat的很多资源导致了吞吐量急骤下降

10.首页渲染全部数据(nginx/gateway/开缓存/优化数据库/关日志/动静不分离)&&首页渲染全部数据(nginx/gateway/开缓存/优化数据库/关日志/动静分离)

1)引入动静分离是将项目的静态资源放在nginx里面,由于上面的压测首页渲染测试使用的localhost并未将nginx加入进来,所以这里先压测首页渲染全部数据(nginx/gateway/开缓存/优化数据库/关日志/动静不分离)然后再压测首页渲染全部数据(nginx/gateway/开缓存/优化数据库/关日志/动静分离)这样可以对比出效果!
2)首页渲染全部数据-动静不分离开始压测
在这里插入图片描述
在这里插入图片描述

3)指标报告
在这里插入图片描述

在这里插入图片描述
由此可见和压测8相比,加入了nginx和gatew吞吐量有下降了;下面来看看实现动静分离的效果!

4)动静分离压测
在这里插入图片描述

4.1 /static/**所有请求都有nginx直接返回,tomcat就不需要分一些线程来处理静态资源了可以进一步提高吞吐量!
4.2 在虚拟机中nginx的挂载目录下创建static文件夹
在这里插入图片描述
4.3 将index静态资源 剪切 到虚拟机的static文件夹下
在这里插入图片描述
4.4 关闭thymeleaf缓存重启项目,所有静态资源都无法访问了,这时候需要安照该路径配置nginx,让nginx找到这些静态资源
在这里插入图片描述
4.5 配置nginx动静分离

cd /mydata/nginx/conf/conf.d/
vi gulimall.conf

加入下面配置

location /static/ {
        root  /usr/share/nginx/html;
    }

静态资源都到/nginx/html文件下找;动态请求负载均衡到我们的后台服务
在这里插入图片描述
4.6 保存配置文件重启nginx服务,nginx加载静态资源完成
在这里插入图片描述
6.7 开启缓存重启服务,进行首页渲染全部数据–动静分离压测
在这里插入图片描述
在这里插入图片描述
6.8 指标报告
吞吐量有上一次对比压测的7吞吐量上升到32吞吐量了,进入jvisualvm监控台看发现现在慢的主要原因是在老年代的gc上,而不是nginx动静分离了
没过多久发现jemeter控制台报错了,内存溢出服务崩溃!
在这里插入图片描述

于是重新给jemeter和要启动的服务分配了内存
进入JMeter的bin路径,找到JMeter的启动文件
在这里插入图片描述
编辑jmeter.bat,修改set HEAP的值(-Xms是初始内存,-Xmx是最大占用内存);

在这里插入图片描述
给启动的服务分配内存:
在这里插入图片描述
最大和初始内存都固定为1024m; -Xmn512m新生代去调整为512m;目的是让他不进行频繁的垃圾回收

-Xmx1024m -Xms1024m -Xmn512m

分配完成重启服务再来进行压测
在这里插入图片描述

通过压测结果发现nginx动静分离明显提高吞吐量,现在的tomcat只处理动态请求,占用的资源就会很小了!

压力测试表

压测内容压测线程数吞吐量/s90%响应时间99%响应时间
nginx5065006117
gateway502112839
简单服务503840826
gateway+简单服务5097591232
nginx+gateway+简单服务50107464105
首页渲染50631103348
首页渲染(开启thymeleaf缓存)5068693335
首页渲染(开缓存/优化数据库/关日志)50208832162
首页渲染全部数据(开缓存/优化数据库/关日志)5010374717797
首页渲染全部数据(nginx/gateway/开缓存/优化数据库/关日志/动静不分离)507425918148
首页渲染全部数据(nginx/gateway/开缓存/优化数据库/关日志/动静分离)506311911591
三级分类数据获取503123552848
三级分类获取获取(优化业务)50331216450
三级分类获取获取(优化业务/使用redis)5019423452
JMeter的流程通常可以分为以下几个步骤: 1. 确定试目标:首先,你需要明确你的试目标是什么,比如试系统的性能、稳定性、吞吐量等。这将有助于你制定试计划和脚本。 2. 创建试计划:在JMeter中,你需要创建一个试计划,该计划将包含你的试场景和相关配置。在试计划中,你可以设置线程组、取样器、监听器等。 3. 配置线程组:线程组是用来模拟并发用户的组件。你可以设置线程数、启动时间、循环次数等参数。根据你的需求,可以创建多个线程组来模拟不同类型的用户行为。 4. 添加取样器:取样器用于发送请求给被系统并获取响应。在JMeter中有多种类型的取样器可供选择,如HTTP请求、FTP请求等。你可以根据系统的实际情况选择合适的取样器。 5. 配置监听器:监听器用于收集和显示试结果。你可以选择适合你的需求的监听器,如查看请求响应时间、错误率、吞吐量等。常用的监听器包括查看结果树、聚合报告、图形结果等。 6. 断言和前置处理器:断言用于验证服务器的响应是否符合预期,可以检查响应内容、响应码等。前置处理器用于在发送请求之前进行一些预处理操作,如提取参数、设置Cookie等。 7. 运行试计划:当你完成了试计划的配置后,你可以点击运行按钮来启动试。JMeter将模拟并发用户发送请求,并收集试结果。 8. 分析试结果:试结束后,你可以使用监听器来查看试结果。通过分析结果,你可以了解系统的性能指标,如响应时间、吞吐量、并发用户数等。你还可以导出结果报告进行更详细的分析和展示。 请注意,以上只是一个基本流程,实际情况可能会因系统的不同而有所差异。在配置和运行试之前,建议你先了解被系统的特点和试需求,以便更好地进行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值