Java教程

性能压测Jmeter基本介绍

本文主要是介绍性能压测Jmeter基本介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

一.jemeter安装使用

1.将压缩包解压后在bin目录运行jmeter.bat设置语言国际化
在这里插入图片描述
2.在默认的测试计划中创建测试线程组
在这里插入图片描述
3.
3.在刚创建的线程组下添加取样器测试HTTP请求
在这里插入图片描述
压力测试的接口
在这里插入图片描述
4.在线程组下添加监听器用于查看压测接口的相关指标报告
在这里插入图片描述

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

二.性能监控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.首页渲染(nginx/gateway/开缓存/优化数据库/关日志/动静不分离)&&首页渲染(nginx/gateway/开缓存/优化数据库/关日志/动静分离)

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

3)指标报告

在这里插入图片描述
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 开启缓存重启服务,进行动静分离压测
通过压测结果发现分离的和不分离的吞吐量相差不是很明显,最起码现在的tomcat只处理动态请求,占用的资源就会很小了!

压力测试表

压测内容压测线程数吞吐量/s90%响应时间99%响应时间
nginx5065006117
gateway502112839
简单服务503840826
gateway+简单服务5097591232
nginx+gateway+简单服务50107464105
首页渲染50631103348
首页渲染(开启thymeleaf缓存)5068693335
首页渲染(开缓存/优化数据库/关日志)50208832162
首页渲染(nginx/gateway/开缓存/优化数据库/关日志/动静不分离)50585125276
首页渲染(nginx/gateway/开缓存/优化数据库/关日志/动静分离)50580126279
三级分类数据获取503123552848
三级分类获取获取(优化业务)50331216450
三级分类获取获取(优化业务/使用redis)5019423452
全链路502129920
这篇关于性能压测Jmeter基本介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!