【性能优化】一、使用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中的线程进行监控,从而做出进一步的判断,创建单测,进行一定的测试:

压测内容压测线程数吞吐量/s90%响应时间99%响应时间
Nginx509755822
Gateway503472725
简单接口502426636
Gateway + 简单接口5055001745
Nginx + Gateway + 简单接口5021003053
首页接口(单独)50230341543
三级分类接口(嵌套循环查询)501(2,加索引后)(8,业务优化后)3430038400
首页全量数据(包括静态资源渲染)(无Thymeleaf缓存)50689471529
首页全量数据(包括静态资源渲染)(有Thymeleaf缓存)50728191007
首页全量数据(包括静态资源渲染)(有Thymeleaf缓存、数据库加索引、关日志)501007311232
首页全量数据(不包括静态资源渲染)(有Thymeleaf缓存、数据库加索引、关日志)50310286423
首页全量数据(包括静态资源渲染)(动静分离)502032284778
首页全量数据(包括静态资源渲染)(动静分离 + 增加内存,增加新生代使用内存(-Xmx1024m -Xms1024m -Xmn512m)(最大内存,初始内存,新生代内存))5025

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

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

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

在三级分类接口中:主要的性能影响因素就是死亡一般的嵌套查询操作以及DB操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020 年网络安全应急响应分析报告

2020 年全年奇安信集团安服团队共参与和处置了全国范围内 660起网络安全应急响应事件。2020 年全年应急响应处置事件行业 TOP3 分别为:政府部门行业(146 起)医疗卫生行业(90 起)以及事业单位(61 起,事件处置数分别占应急处置所有行业的 22.1%、13.6%、9.2%。2020 年…

防篡改、控权限,一键搞定!迅软DLP助您轻松应对企业外发风险

由于电子文档传播性强,政企单位在与客户或合作伙伴分享重要资料时,存在非法篡改和无序传播的风险。因此,为了保护自身利益并确保与外界的安全交流,对外发文件的有效安全管控变得至关重要。 迅软DLP提供了针对外发文件的严格安全管…

OAuth 2.0进阶指南:解锁高级功能的秘密

欢迎来到我的博客,代码的世界里,每一行都是一个故事 OAuth 2.0进阶指南:解锁高级功能的秘密 前言令牌管理与刷新令牌的生命周期:刷新机制:有效管理访问令牌,防止令牌泄漏的方法: 客户端凭证客户…

宝塔Linux:部署His医疗项目通过jar包的方式

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​​ 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有…

OpenAI发布官方提示工程指南和示例

OpenAI提供了一系列策略和技巧,以帮助用户更有效地使用ChatGPT。这些方法可以单独使用也可以组合使用,以获得更好的效果。官方给出了6 个大提示策略(并给出了具体教程和示例) 主要策略: 1、清晰的指令: 告…

测试估算:确保项目成功的关键

引言: 在软件开发过程中,测试是不可或缺的一环。它可以帮助发现和修复软件中的错误和缺陷,提高软件的质量和可靠性。然而,测试工作需要耗费大量的时间和资源,因此进行测试估算是至关重要的。本文将介绍测试估算的重要性…

微信小程序校园跑腿系统怎么做,如何做,要做多久

​ 在这个互联网快速发展、信息爆炸的时代,人人都离不开手机,每个人都忙于各种各样的事情,大学生也一样,有忙于学习,忙于考研,忙着赚学分,忙于参加社团,当然也有忙于打游戏的&#x…

js中国标准时间转换

一、将中国标准时间转换为 例如 2023-12-18 08:00:00 // 获取今天的日期let today new Date();// 设置 beginDate 为今天的上午8点let beginDate new Date(today.getFullYear(), today.getMonth(), today.getDate(), 8, 0, 0, 0);// 设置 finishDate 为 beginDate 的后三天的…

快速排序(一)

目录 快速排序(hoare版本) 初级实现 问题改进 中级实现 时空复杂度 高级实现 三数取中 快速排序(hoare版本) 历史背景:快速排序是Hoare于1962年提出的一种基于二叉树思想的交换排序方法 基本思想&#xff1a…

Flink系列之:窗口去重

Flink系列之:窗口去重 一、窗口去重二、示例三、限制 一、窗口去重 适用于Streaming窗口去重是一种特殊的去重,它根据指定的多个列来删除重复的行,保留每个窗口和分区键的第一个或最后一个数据。对于流式查询,与普通去重不同&…

软件测试技术分享| Appium用例录制

下载及安装 下载地址: github.com/appium/appi… 下载对应系统的 Appium 版本,安装完成之后,点击 “Start Server”,就启动了 Appium Server。 在启动成功页面点击右上角的放大镜,进入到创建 Session 页面。配置好…

QT作业3

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&#xf…

Java 程序的命令行解释器

前几天我写了一个简单的词法分析器项目:https://github.com/MarchLiu/oliva/tree/main/lora-data-generator 。 通过词法分析快速生成 lora 训练集。在这个过程中,我需要通过命令行参数给这个 java 程序传递一些参数。 这个工作让我想起了一些不好的回忆…

对Arthas-Trace命令的一次深度剖析,竟发现...

前言:此文仅为笔者学习Arthas源码的一次尝试,不对本文结论负全部责任。 一、背景 笔者在学习arthas这个十分方便的小工具的过程中,发现: 目前据arthas官方解释:因为trace多层是十分消耗资源的,因此trace命…

【期刊出版征稿】2024年艺术、教育和管理国际学术会议(ICAEM2024)

2024年艺术、教育和管理国际学术会议 2024 International Conference on Arts, Education and Management(ICAEM2024) 2024年艺术、教育和管理国际学术会议(ICAEM2024)将于2024年2月02-04日在马来西亚-吉隆坡召开。会议主题主要…

跨境助手:提升跨境电商卖家运营效率的利器

在如今全球化的商业环境中,跨境电商成为越来越多卖家追逐的商机。然而,对于新手卖家来说,跨境电商的复杂性和竞争激烈的市场环境可能会成为入坑的风险。如何降低风险、提高运营效率成为卖家们关注的焦点。而跨境助手作为一款专为跨境电商卖家…

Python Pandas 如何增加/插入一列数据(第5讲)

Python Pandas 如何增加/插入一列数据(第5讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

Spring Boot JSON中文文档

本文为官方文档直译版本。原文链接 Spring Boot JSON中文文档 引言Jackson自定义序列化器和反序列化器混入 GsonJSON-B 引言 Spring Boot 提供与三个 JSON 映射库的集成: GsonJacksonJSON-B Jackson 是首选的默认库。 Jackson Spring-boot-starter-json 提供了…

Python实现冰墩墩

目录 一、运行效果 图片效果 二、项目概述 三、开发环境 四、实现步骤及代码 1.导入需要的库。 2.完成剩余部分代码。 五、项目总结 六、源码获取 一、运行效果 图片效果 二、项目概述 这个项目使用了turtle库绘制了一个编程乐学的Logo。Logo中包含了一个笑脸&#xf…

64道Go机制高频题整理(附答案背诵版)

如何解决Golang uint 类型溢出问题? Golang的uint类型溢出问题通常会在大量运算中发生,特别是在涉及到大量循环或者大数运算时。当uint类型的值超过其最大值时,它会发生溢出,然后从该类型的最小值开始循环。为了解决这个问题&…