微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

性能压测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).开始压测

在这里插入图片描述


压测进行时的Nginxcpu使用情况:发现比较浪费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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐