谷粒商城-性能压测

1.压力测试

在项目上线前对其进行压力测试(以每个微服务为单元)

目的:找到系统能承载的最大负荷,找到其他测试方法更难发现的错误(两种类型:内存泄漏,并发与同步).

1.性能指标

响应时间(Response Time (RT)): 响应时间 指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。

HPS(Hits Per Second):每秒点击次数,单位是 次/秒.(意义不大)

TPS(Transaction Per Second):每秒处理的交易数,单位是 笔/秒.

QPS(Query Per Second):每秒处理的查询次数,单位是 次/秒

对于互联网业务中,如果某些业务有且仅有一个请求连接,那么TPS=QPS=HPS,般情况下用 TPS 来衡量整个业务流程,用 QPS 来衡量接口查询次数,用 HPS 来表示对服务器单击请求。

最大响应时间(Max Response Time):指用户发出请求或者指令到系统做出反应(响应)的最大时间.

最少响应时间(Mininum ResponseTime):指用户发出请求或者指令到系统做出反应(响应)的最小时间.

90%响应时间(90% ResponseTime):是指所有用户的响应时间进行排序,第 90%的响应时间.

从外部看,性能测试主要关注如下指标:

        吞吐量:每秒钟系统能够处理的请求数、任务数。

        响应时间:服务处理一个请求或一个任务的耗时。

        错误率:一批请求中结果出错的请求所占比例。

2.JMeter

1.安装JMeter

Apache JMeter - Download Apache JMeter下载,解压,来到bin目录找到jmeter.bat文件

2.JMeter压测示例

1.添加线程组

HTTP请求里写的是要压力测试的目标,查看结果树,汇总报告,聚合报告可以看到我们上述说的很多性能指标

3.JMeter Address Already in use错误解决

windows 本身提供的端口访问机制的问题。Windows 提供给 TCP/IP 链接的端口为 1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。

1.cmd中,用regedit命令打开注册表

2.性能监控

影响性能考虑点包括:

        数据库,应用程序,中间件(tomcat,Nginx),网络和操作系统等方面

首先考虑自己的应用属于 CPU密集型 还是 IO密集型

1.JVM内存模型

优化更多的是在 堆

2.堆

运行期间所有的对象实例创建和内存分配都放在了 堆 里

新对象创建过程和垃圾回收机制:

先看Eden(伊甸园区)放不放的下,放不下,就进行一次MinorGC(小GC清理Eden区的没用的对象,把有用的对象放进Survival(幸存者区)区),然后继续看Eden放不放的下,放不下,就转进 老年代 ,看 老年代 是否放的下,放不下,进行一次FULL GC(大GC,会清理掉堆中所有的没用的对象,但是性能比小GC慢10倍),如果 老年代 也放不下,就会报内存溢出错误 OOM.

其中在进行 MinorGC的有用的旧对象会被放入 Survival(幸存者区),会根据MinorGC不断在S1和S0交换位置,方便腾出更大的空间,且每次MinorGC都会使 Survival 里的对象增加一岁,当增加至 15 岁时会被转入 老年代 中(15岁是因为计算年龄用4bit 1111是15).

了解垃圾回收机制后,我们在进行压力测试时就需要监控 堆 内的这些内存情况,可以使用 jconsole 和 jvisualvm 来监控

3.Jvisualvm

jdk8以上没有了,可以去官网下载VisualVM

下载后可以在Idea中找VisualVM插件,下载完配置VisualVM插件,以下可参考:

JVisualVM 性能分析与 Mybatis ResultHandler 实战_idea jvisualvm-CSDN博客

添加GC插件:

1.Jvisualvm可以干什么

监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析..

我们来测试中间件对响应的影响:

打开JMeter:

然后看

得出结论:中间件越多,性能损失越大,大多都损失在网络交互

业务:

        Db(数据库)(MySQL优化)

        模板的渲染速度(CPU ,缓存)

        静态资源

3.优化

1.nginx动静分离

先把index挪进nginx:

删掉本机里的index:

然后在nginx的conf的nginx.conf文件里更改:

更改HTML页面的引用路径

2.增加内存

3.优化业务(三级分类数据获取)

之前是循环查询数据库,导致性能降低,我们只查询一次数据库,就会提升性能:

抽取方法:

    private List<CategoryEntity> getParent_cid(List<CategoryEntity> selectList ,Long parent_cid) {List<CategoryEntity> collect = selectList.stream().filter(item -> item.getParentCid() == parent_cid).collect(Collectors.toList());return collect;//return baseMapper.selectList(new QueryWrapper<CategoryEntity>().eq("parent_cid", v.getCatId()));}
    @Overridepublic Map<String, List<Catelog2Vo>> getCatalogJson() {/*** 1.将数据库的多次查询变为一次*/List<CategoryEntity> selectList = baseMapper.selectList(null);//1.查出所有1级分类List<CategoryEntity> level1Categorys = getParent_cid(selectList,0L);//2.封装数据Map<String, List<Catelog2Vo>> collect = level1Categorys.stream().collect(Collectors.toMap(k -> k.getCatId().toString(), v -> {//1.遍历每一个一级分类,查到这个一级分类里的所有二级分类List<CategoryEntity> categoryEntities = getParent_cid(selectList,v.getParentCid());//2.封装上面的结果List<Catelog2Vo> catelog2Vos = null;if (categoryEntities != null) {catelog2Vos = categoryEntities.stream().map(l2 -> {Catelog2Vo catelog2Vo = new Catelog2Vo(v.getCatId().toString(), null, l2.getCatId().toString(), l2.getName());//1.找三级分类List<CategoryEntity> level3Catelog = getParent_cid(selectList,l2.getCatId());if (level3Catelog!=null){List<Catelog2Vo.Catelog3Vo> catelog3Vos = level3Catelog.stream().map(l3 -> {//2.封装成指定格式Catelog2Vo.Catelog3Vo catelog3Vo = new Catelog2Vo.Catelog3Vo(l2.getCatId().toString(), l3.getCatId().toString(), l3.getName());return catelog3Vo;}).collect(Collectors.toList());catelog2Vo.setCatalog3List(catelog3Vos);}return catelog2Vo;}).collect(Collectors.toList());}return catelog2Vos;}));return collect;}

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

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

相关文章

【第五天】HTTPS和HTTP有哪些区别,HTTPS的工作原理

HTTPS和HTTP的区别&#xff1a; 1.安全性&#xff1a; HTTP是明文传输协议&#xff0c;数据在传输的过程中不加密&#xff0c;容易被窃听和篡改。HTTPS通过使用SSL或TLS协议对数据进行加密&#xff0c;确保传输的数据在网络上是安全的&#xff0c;不容易被窃取和篡改。 2.加…

leetcode-104. 二叉树的最大深度

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,n…

自动化测试 pytest 中 scope 限制 fixture使用范围!

导读 fixture 是 pytest 中一个非常重要的模块&#xff0c;可以让代码更加简洁。 fixture 的 autouse 为 True 可以自动化加载 fixture。 如果不想每条用例执行前都运行初始化方法(可能多个fixture)怎么办&#xff1f;可不可以只运行一次初始化方法&#xff1f; 答&#xf…

一招就能轻松解决猫咪浮毛?最新值得买的浮毛空气净化器汇总分享

那次逛街后去朋友家&#xff0c;她家猫哈基米特别热情&#xff0c;一开门就扑过来&#xff0c;朋友直接给了个大拥抱加亲亲。汗水和猫毛全粘身上了&#xff0c;看着都让人头皮痒。好多铲屎官都抱怨&#xff0c;就算天天梳毛&#xff0c;家里还是到处都是毛&#xff0c;毕竟家里…

理解文件系统(上)

模拟实现文件库 创建文件以便理解 自己想实现的文件接口&#xff0c;进行模拟实现 模拟的头文件要准备的头文件 open接口的实现 write接口的实现fflush接口的实现 flose接口的实现 文件实现 stdio.h stdio.c test.c makefile 创建makefile 编译运行 执行后输出log.txt,看…

【虚拟机】 VMware截图版详细安装教程

VMware-workstation-full-17.5.1-23298084 的安装&#xff0c;详细安装过程。 1.以管理员身份运行安装包 点击文件&#xff0c;右键打开&#xff0c;以管理员身份运行&#xff1b; 2.根据安装提示&#xff0c;重启电脑&#xff1b; &#xff08;重启与否看自己电脑情况&…

【深入理解SpringCloud微服务】深入理解Ribbon原理并手写一个微服务负载均衡器

深入理解Ribbon原理并手写一个微服务负载均衡器 负载均衡器理解Ribbon原理手写一个微服务负载均衡器总体设计LoadBalanceClientHttpRequestFactorySimpleLoadBalanceClientSimpleLoadBalancerLoadBalanceRulespring.factories与LoadBalanceConfig 负载均衡器 在微服务架构里面…

ElasticSearch(七)— 相关性检索和组合查询

一、 相关性评分 全文检索与数据库查询的一个显著区别&#xff0c; 就是它并不一定会根据查询条件 做完全精确的匹配。除了模糊查询以外&#xff0c;全文检索还会根据查询条件给文档的相关性打分并排序&#xff0c;将那些与查询条件相关性高的文档排在最前面。 相关性( Relev…

kubernetes service详解

一、service的类型 clusterip&#xff1a;集群内部访问externalname&#xff1a;调用外部API时使用&#xff0c;域名解析&#xff0c;让应用不用关心实际的IP地址nodeport&#xff1a;集群外部访问&#xff0c;暴漏节点上的端口&#xff0c;转发到pod内loadbalancer&#xff1…

【科大讯飞笔试题汇总】2024-07-27-科大讯飞秋招提前批(研发岗)-三语言题解(Cpp/Java/Python)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新 秋招笔试题 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f4e7; 清隆这边最近正在收集近一年半互联网笔试题汇总&#xff0c;有需要的小伙伴可以关注 文末 公主号…

如何通过压缩提示降低GPT-4的成本

如果使用得当&#xff0c;LLMLingua可以降低使用高级LLM的成本&#xff0c;并使更广泛的用户和应用程序可以使用LLM。 像GPT-4和Claude这样的大型语言模型(LLM)可以通过良好的提示工程学习新任务。然而&#xff0c;较长的提示会增加使用这些模型的成本&#xff0c;并且还会减慢…

使用大型语言模型进行文档解析(附带代码)

动机 多年来&#xff0c;正则表达式一直是我解析文档的首选工具&#xff0c;我相信对于许多其他技术人员和行业来说也是如此。 尽管正则表达式在某些情况下功能强大且成功&#xff0c;但它们常常难以应对现实世界文档的复杂性和多变性。 另一方面&#xff0c;大型语言模型提供了…

vue3使用vue-i18n,调用t时指定语言获取翻译后的文本

今天碰到一个问题。就是使用i18n在调用t(‘key’)时&#xff0c;一般是直接返回当前语言文本。 比如我现在是简体。直接调用 t(‘commonBar.close’) 的话会返回简体 ‘关闭’。 但我现在这个地方返回其他语言&#xff0c;比如繁体。要怎么处理呢 查了文档&#xff0c;发现t函数…

writing classes ... [xxx of xxxx] 执行时间太长

一、问题展示 二、解决方法 打开设置【File - Settings…】修改堆大小

【C++】选择结构-多条件if语句

多条件if语句格式为 if(第一个条件) else if(若第一个条件未满足&#xff0c;执行此条件) {第二个条件满足执行此操作} else if(若第二个条件未满足&#xff0c;执行此条件) {第三个条件满足执行此操作} ...... else{若所有条件都不满足执行此操作} 下面是一个实例 #inc…

Qt基础 | 自定义界面组件 | 提升法 | 为UI设计器设计自定义界面组件的Widget插件 | MSVC2019编译器中文乱码问题

文章目录 一、自定义 Widget 组件1.自定义 Widget 子类2.自定义 Widget 组件的使用 二、自定义 Qt Designer 插件1.创建 Qt Designer Widget 插件项目2.插件项目各文件的功能实现3.插件的编译与安装4.使用自定义插件5.使用 MSVC 编译器输出中文的问题 一、自定义 Widget 组件 当…

Vue2从基础到实战(指令篇)

Vue中的常用指令&#xff01; 概念&#xff1a;指令&#xff08;Directives&#xff09;是 Vue 提供的带有 v- 前缀 的 特殊 标签属性。 vue 中的指令按照不同的用途可以分为如下 6 大类&#xff1a; 内容渲染指令&#xff08;v-html、v-text&#xff09; 条件渲染指令&…

计科录取75人!常州大学计算机考研考情分析!

常州大学&#xff08;Changzhou University&#xff09;&#xff0c;简称“常大”&#xff0c;位于江苏省常州市&#xff0c;是江苏省人民政府与中国石油天然气集团有限公司、中国石油化工集团有限公司及中国海洋石油集团有限公司共建的省属全日制本科院校&#xff0c;为全国深…

C++~~string模拟实现(3)

目录 1.传统写法和现代写法 2.对于流提取的优化 3.简单机制了解 4.string类的几个构造函数总结 4.1基本用法 4.2两个赋值方式 4.3拷贝构造 4.4获取字符 4.5一个容易混淆的对比 4.6创建对象 1.传统写法和现代写法 &#xff08;1&#xff09;上面的代码里面的左边部分是…

51单片机-第五节-串口通信

1.什么是串口&#xff1f; 串口是通讯接口&#xff0c;实现两个设备的互相通信。 单片机自带UART&#xff0c;其中引脚有TXD发送端&#xff0c;RXD接收端。且电平标准为TTL&#xff08;5V为1,0V为0&#xff09;。 2.常见电平标准&#xff1a; &#xff08;1&#xff09;TTL电…