【性能优化】一、使用JMeter进行压力测试并进行简单调优

这篇具有很好参考价值的文章主要介绍了【性能优化】一、使用JMeter进行压力测试并进行简单调优。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

压力测试

压力测试不同于功能测试,其目的是为了测试出系统在高并发,高数据量的情况下可能会出现的问题(内存泄露、并发、同步)

一种典型的内存泄漏就是对象在创建之后由很多用户进行调用,导致对象被不断新建但复用率很低,导致内存不足(内存泄露的典型问题)

有效的压力测试应用的关键条件:重复、并发、量级、随机变化

性能指标

  • 响应时间:客户端从发起一个请求开始,到接收到服务器的响应为止,整个过程所耗费的时间

  • TPS:系统每秒能够处理的事务数(Java中的事务,暨一系列不可中断的操作)

  • QPS:系统每秒处理的查询次数(次/秒)(一般指接口的查询次数)

    TPS、QPS、HPS都是衡量系统处理能力的非常重要的指标,越大越好,

    • 金融行业:1000 - 50000 TPS
    • 保险行业:100 - 100000 TPS 可能涉及到极其复杂的业务场景,这种情况下允许TPS降低
    • 制造行业:10 - 5000 TPS 使用并发量低,对高并发场景没有很高的要求
    • 互联网电子商务:10000 - 1000000 TPS
    • 互联网中型网站:1000 - 50000 TPS
    • 互联网小型网站:500 - 10000 TPS
  • 最大响应时间:用户发出请求到收到响应的最长时间

  • 最少响应时间:用户发出请求到收到响应的最短时间

  • 90%响应时间:所有用户的响应时间进行排序,第90%的响应时间

  • 此外,我们要看重的指标主要有:吞吐量(每秒钟系统可以处理的请求数、任务数)、响应时间:(服务处理一个请求或一个任务的耗时)、错误率:(一批请求中结果出错的请求所占的比例)

JMeter

压力测试工具有很多选择,这里我们选择JMeter进行压力测试,一般选择添加线程组、线程组下的HTTP请求、查看结果树、汇总报告、聚合报告、汇总图等信息用来检查结果,结果可以查看吞吐量、90%百分位、中位数等信息来判断系统性能

Windows下JMeter Address In Use错误的解决

由于我们使用JMeter时,每一次测试请求都需要占用一个windows端口,windows允许的对外端口是1024 - 5000 ,而Windows所需要的回收时间是4分钟,故我们在短时间进行测试时,会发生端口不够用的问题

在regedit注册表信息中添加:

计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

下新建DWORD值:MaxUserPort:65534、TCPTimedWaitDelay:30

使其端口最大允许65534、TCP回收时间为30S

性能优化思路

首先,我们要知道影响性能的因素,主要包括:数据库、应用程序、中间件、网络、操作系统等因素,再具体在其中进行对应的优化

其次,我们要知道我们的应用程序属于CPU密集型 还是 IO密集型,系统常见的是计算、排序、数据处理等操作一般是CPU密集型应用程序、常见的是进行数据读取,发送,存储的一般属于IO密集型应用程序,同时,我们也可以通过其实际上的运行情况进行判断我们目前更需要哪方面的优化(看CPU占用和IO占用情况)

JVM简述:

我们在存放一个新的对象时,会优先检查其是否能被存储在新生代的Eden区,若放不下,则会进行YoungGC,对新生代进行检测并清除,再检查是否能放下,若还放不下,则直接向老年区存储,若还是放不下,则进行Full GC,若还是放不下则会抛出OOM异常

同时,我们会尽量将Eden区的数据放到幸存者区,以保证我们在新增对象的时候可以直接存放,不进行GC,另外Full GC的速度是Y GC速度的10倍左右,高频的FullGC会导致系统性能极差

使用jvisualvm监控性能指标

我们常用的监控系统JVM性能指标的工具有jconsole、以及他的升级版jvisualvm,这里我们使用升级版的工具jvisualvm进行性能监控:

注意,高版本JDK已经不再自动集成jvisualvm,需要我们自己安装

jvisualvm的作用:监控内存泄漏、跟踪垃圾回收、执行时内存、CPU分析、线程分析…

运行:正在运行的线程

休眠:sleep中的线程

等待:wait的线程

驻留:线程池中的空闲线程

监视:阻塞的线程(正在等待锁的线程)

安装Visual GC

tools -> Plugins 在settings中打开网址(io结尾)在download中选择左边的Visual GC下载,不要被网上的教程从右边下载欺骗,下载安装之后我们就可以查看对应的Java线程的GC信息

实际使用压力测试进行简单优化

在Linux中,我们可以使用docker status来对Linux中的线程进行监控,从而做出进一步的判断,创建单测,进行一定的测试:

压测内容 压测线程数 吞吐量/s 90%响应时间 99%响应时间
Nginx 50 9755 8 22
Gateway 50 34727 2 5
简单接口 50 24266 3 6
Gateway + 简单接口 50 5500 17 45
Nginx + Gateway + 简单接口 50 2100 30 53
首页接口(单独) 50 230 341 543
三级分类接口(嵌套循环查询) 50 1(2,加索引后)(8,业务优化后) 34300 38400
首页全量数据(包括静态资源渲染)(无Thymeleaf缓存) 50 68 947 1529
首页全量数据(包括静态资源渲染)(有Thymeleaf缓存) 50 72 819 1007
首页全量数据(包括静态资源渲染)(有Thymeleaf缓存、数据库加索引、关日志) 50 100 731 1232
首页全量数据(不包括静态资源渲染)(有Thymeleaf缓存、数据库加索引、关日志) 50 310 286 423
首页全量数据(包括静态资源渲染)(动静分离) 50 20 3228 4778
首页全量数据(包括静态资源渲染)(动静分离 + 增加内存,增加新生代使用内存(-Xmx1024m -Xms1024m -Xmn512m)(最大内存,初始内存,新生代内存)) 50 25

我们可以直观的看出来:单独Gateway和单独简单接口都有较高的吞吐量,而两者结合就会使性能大幅下降,故:中间件越多,系统性能损耗越大(主要损失在网络IO上)

注意,此处的压力测试是通过本机测本机的结果,这种结果不太具有参考价值,因为压测的线程会和实际运行的线程发生竞争,使得结果偏差

在单独的首页中:主要的性能影响因素是DB操作以及Thymeleaf渲染

在三级分类接口中:主要的性能影响因素就是死亡一般的嵌套查询操作以及DB操作文章来源地址https://www.toymoban.com/news/detail-770308.html

到了这里,关于【性能优化】一、使用JMeter进行压力测试并进行简单调优的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 性能测试-压力测试-jmeter简单实战

    压力测试考察当前 软硬件环境 下系统 所能承受的最大负荷并帮助找出系统瓶颈所在 。压测都是为了系统在线上的 处理能力和稳定性维持在一个标准范围内 ,做到心中有数。 使用压力测试,我们有希望发现找到很多种其他测试方法很难发现的错误。 有两种错误类型是:内

    2024年02月10日
    浏览(47)
  • JMeter分布式集群---部署多台机器进行性能压力测试

    有些时候,我们在进行压力测试的时候,随着模拟用户的增加,电脑的性能(CPU,内存)占用是非常大的,为了我们得到更加理想的测试结果,我们可以利用jmeter的分布式来缓解机器的负载压力,分布到多台机器同时运行。 1.Jmeter分布式执行原理: 1、Jmeter分布式测试时,选择

    2024年02月11日
    浏览(42)
  • 压力测试:使用 JMeter 进行压力测试

    创建新目录 jmeter_demo 在该目录下打开命令行输入: shell 复制代码 go mod init jmeter_demo go mod tidy 随后创建各目录与文件如下: shell 复制代码 -- jmeter_demo -- main main 函数目录(启动http和grpc服务) -- main.go -- proto grpc server 的目录 -- chat.go -- chat.pb.gp -- chat.proto -- test_plan jmeter 测试计划 --

    2024年04月16日
    浏览(42)
  • 使用JMeter 进行压力测试

    Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对

    2024年02月16日
    浏览(49)
  • 使用Jmeter进行压力测试

    参考地址: https://blog.cs

    2024年02月13日
    浏览(43)
  • 如何使用jmeter进行系统压力测试?

    1.1 常用组件以及参数介绍 1.1.1 基本软件 需准备一下工具 压测工具: jmeter-2.13 服务器性能监控:jmeter插件 ServerAgent-2.2.1 压测时,直接使用jmeter模拟终端发起交易,jmeter可统计交易并发;ServerAgent在服务器启动agent,开放4444端口,jmeter通过agent获取相关的服务器性能数据,包括

    2024年02月07日
    浏览(42)
  • JMeter - 接口压力测试工具简单使用

    【启动前配置】 启动JMeter前可以先配置语言和编码: 修改:E:JMeterapache-jmeter-5.5binjmeter.properties文件中: 1.language=en # 指定语言 language=zh_CN 2.sampleresult.default.encoding=ISO-8859-1 # 指定编码 UTF-8 sampleresult.default.encoding=UTF-8 也可以启动后设置语言:Options  -- Choose language  -- Chinese

    2024年02月12日
    浏览(46)
  • 如何使用Jmeter对WebSocket进行压力测试

    01 环境准备 Jmeter对WebSocket协议的环境准备: 因为Jmeter本身不支持WebSocket协议的,所以需要安装第三方的插件JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar,并直接将这个jar包放到Jmeter软件的libext目录下。 查阅https://github.com/maciejzaleski/JMeter-WebSocketSampler/wiki/Dependencies看到,这个插件需要以

    2024年02月08日
    浏览(45)
  • JMeter系列4-使用JMeter进行压力测试,计算吞吐量

    1、随着线程的增加,throughout不变了,再增加,只能延时增长了,说明已经达到最大QPS 2、很好推断,一个进程一次接口的响应时间是500ms,那么一个进程的qps为2,四个进程的qps就是8 参考:https://blog.csdn.net/Le_1M/article/details/121105877 2.添加Constant Throughput Timer(常量吞吐量定时器)

    2023年04月08日
    浏览(46)
  • 使用jmeter的HLS插件进行流媒体的压力测试

    目录 一、准备 二、使用步骤 1.添加HLS插件 2. 示例 最近项目中开始做国标的项目,需要进行视频流的压力测试,在前端界面基本上最多也就是16宫格,想要测试更多的视频流,就需要使用jmeter中的HLS Plugins来进行压力测试(能自己写脚本的更好),下面就是本人进行视频流测

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包