项目压测优化实践思路项目性能优化性能问题分析01性能优化的终极目标是什么?用户体验=产品设计(非技术)+

应用性能是产品用户体验的基石,性能优化的终极目标是优化用户体验。当我们谈及性能,最直观能想到的一个词是“快”,哪到底怎么才是快呢?如何又为慢!

性能优化

FPS是体现页面顺畅程度的一个重要指标。

12306购票案例查询按钮的设计

阿里云:5台4C8G机器,4台压力机2C4G

服务器环境:1台压力机,1台应用服务主机,1台数据库与缓存服务器,1CICD服务器

内网ip:172.17.187.81(I/O优化)25Mbps峰值

内网ip:172.17.187.78(I/O优化)25Mbps峰值

内网ip:172.17.187.79(I/O优化)25Mbps峰值

内网ip:172.17.187.80(I/O优化)25Mbps峰值

网络中的Mbps和MBps,及两者的换算关系

Mbps=Megabitpersecond(Mbit/sorMb/s)

MBps=Megabytepersecond

1Mbps=0.125MB/s

25Mbps=3.125MB/s

什么是压测?

压力测试(英语:Stresstesting)是针对特定系统或是组件,为要确认其稳定性而特意进行的严格测试。会让系统在超过正常使用条件下运作,然后再确认其结果。

压力测试是对系统不断施加压力,来预估系统服务能力的一种测试。

为什么对系统压测呢?有没有必要。压不压测要看场景!

一般而言,只有在系统基础功能测试验证完成、系统趋于稳定的情况下,才会进行压力测试。

目的是什么?

压测性能指标有哪些?

在这个图中,定义了三条曲线、三个区域、两个点以及三个状态描述。

三条曲线:

三个区域:

两个点:

三个状态描述:

常用压测工具:

JMeter压测环境架构图:

压测目标总的来说有4条:

ApacheJMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java小服务程序、CGI脚本、Java对象、数据库、FTP服务器,等等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

目标:完成压测案例,评测SpringBoot项目的吞吐量(TPS)上限。

步骤:

实现:

线程属性说明:

选择keepalive方式,表示使用了长连接。使用长连接可以防止频繁的建立连接,关闭连接消耗性能。一般浏览器都支持keepalive,如果这里不勾选,这样我们的压测的部分性能消耗会发生在建立,关闭连接上,导致我们的压测数据不准确。

(2)配置响应断言:我们接口正常返回code值为20001,如果接口返回code值不是20001表示接口异常,为了测试,这里修改为接口返回code值不为20001则表示访问失败。

配置监听器:监听压测结果【聚合报告和汇总结果很类似,看一个就行】

样本(sample):发送请求的总样本数量

异常(error):出现错误的百分比,错误率=错误的请求的数量/请求的总数

吞吐量(throughout):吞吐能力,在这里相当于TPS

ReceivedKB/sec----每秒从服务器端接收到的响应数据量

SentKB/sec----每秒从客户端发送的请求的数量

记录了样本中的每一次请求

图形结果:分析了所有请求的平均值、终止、偏离值和通吐量之间的关系

横坐标:为请求数量,单位个数

吞吐量TPS(throughout):吞吐能力,这个才是我们需要的并发数

每秒接收KB/sec----每秒从服务器端接收到的数据量

每秒发送KB/sec----每秒从客户端发送的请求的数量

平均字节数

线程组常用来模拟一组用户访问系统资源(API接口)。假如客户机没有足够的能力来模拟较重的负载,可以使用JMeter的分布式测试功能,通过一个JMeter的Master来远程控制多个JMeter的Salve完成测试。

已有内容的分析维度不够:需要加入新的插件

开启插件下载:

在线下载方法如下图所示:

常见的插件如下:

2)压力机活动线程数

压力机活动线程数表明压测过程中施加的压力的情况

3)TPS:每秒的事务数

数字愈大,代表性能越好;

4)QPS:每秒的查询数量

数字愈大,代表性能越好;(1tps>=QPS)

5)吞吐量:每秒的请求数量

压测的时候,我们需要实时了解服务器【CPU、内存、网络、服务器Load】的状态如何,哪如何监控服务器的资源占用情况呢?方法有很多种:

监控原理:

注意:服务器硬件资源的监控,必须在服务端安装serverAgent代理服务,JMeter才能实现监控服务端的cpu、内存、io的使用情况。

好处:可以将所有信息汇总到JMeter工具中来,查看非常方便。

服务器上执行以下命令:

#查询服务器资源使用情况toptop-H如下图所示,可以看到系统负载loadaverage情况,1分钟平均负载,5分钟平均负载,15分钟平均负载分别是0.08,0.03,0.05;

统计信息区前五行是系统整体的统计信息:

好处:不依赖环境,操作系统自带的命令,随时可以查看。

弊端:无法记录历史数据,不能看到变化的趋势

怎么理解系统资源的指标呢,怎么理解系统负载呢?

1)服务器:CPU、内存、网络IO

CPU

内存

网络IO

在类Unix系统中,系统负载是衡量计算机系统执行的计算工作量的指标。

不同的CPU性质不同:单核,双核,四核-->>

举例说明:把CPU比喻成一条(单核)马路,进程任务比喻成马路上跑着的汽车,Load则表示马路的繁忙程度。

情况1-Load小于1:不堵车,汽车在马路上跑得游刃有余:

情况2-Load等于1:马路已无额外的资源跑更多的汽车了:

情况3-Load大于1:汽车都堵着等待进入马路:

如果有两个CPU,则表示有两条马路,此时即使Load大于1也不代表有汽车在等待:

[Load==2,双核,没有等待]

如下分析针对单核CPU

如下分析针对单核CPU的三种情况:

举例:5.18,0.05,0.03

短期内繁忙,中长期空闲,初步判断是一个“抖动”或者是“拥塞前兆”

举例:5.18,1.05,0.03

短期内繁忙,中期内紧张,很可能是一个“拥塞的开始”

情况3:1分钟负载>5,5分钟负载>5,15分钟负载>5

举例:5.18,5.05,5.03

短中长期都繁忙,系统“正在拥塞”

情况01-模拟低延时场景,用户访问接口并发逐渐增加的过程。

线程梯度:5、10、15、20、25、30、35、40个线程

循环请求次数5000次

测试总时长:约等于20msx5000次x8=800s=13分

配置断言:超过3s,响应状态码不为20000,则为无效请求

应用服务器配置:4C8G

外网-网络带宽25Mbps(峰值)

内网-网络带宽基础1.5/最高10Gbit/s

集群规模:单节点

服务版本:v1.0

数据库服务器配置:4C8G

Mbps:Megabitpersecond(Mbit/sorMb/s)MB/s:Megabytepersecond1byte=8bits1bit=(1/8)bytes1bit=0.125bytes1megabyte=10002bytes1megabit=10002bits1megabit=0.125megabytes1megabit/second=0.125megabytes/second1Mbps=0.125MB/s配置监听器:聚合报告:添加聚合报告

查看结果树:添加查看结果树

活动线程数:压力机中活动的线程数

TPS统计分析:每秒事务树

后置监听器,将压测信息汇总到InfluxDB,在Grafana中呈现

压测监控平台:JMeterDashBoard

应用服务器:内存、网络、磁盘、系统负载情况

MySQL服务器:内存、网络、磁盘、系统负载情况

进一步提升压力,发现性能瓶颈

聚合报告

ActiveThreads

RT

TPS

此时就是到了重负载区

压测监控平台与JMeter压测结果一致

压了13分钟,产生了5G的数据,按照我们的阿里云服务器配置,相当于三四块钱没了

压测中服务器监控指标

注意:系统网络带宽为25Mbps

优化方案:

方案01-降低接口响应数据包大小(把不应该推送给用户的优化掉)

返回数据量小的接口,响应数据包0.6kb,请求数据包0.421kb

htp://123.56.249.139:9001/spu/goods/10000023827800方案02-提升带宽【或者在内网压测】

25Mbps-->100Mbps(但是会变贵)

云服务器内网:这里在Linux中执行JMeter压测脚本

jmeter-n-t02-jmeter-example.jmx-l02-jmeter-example.jtl所以就是,想要高并发,money得有才行。

方案03-CDN

买CDN,给用户离他最近的流量

优化之后:

方案01-降低接口响应数据包大小,压测结果

问题:可不可以基于RT与TPS算出服务端并发线程数?

服务端线程数计算公式:TPS/(1000ms/RT均值)

结论:

//慢接口@GetMapping("/goods/slow/{spuId}")publicResultfindGoodsBySpuIdTwo(@PathVariableStringspuId){ Goodsgoods=spuService.findBySpuId(spuId); //模拟慢接口 try{ //休眠500ms TimeUnit.MILLISECONDS.sleep(500); }catch(InterruptedExceptione){ e.printStackTrace(); } returnnewResult(true,StatusCode.OK,"查询成功",goods);}响应慢接口:500ms+,响应数据包3.8kb,请求数据包0.421kb

htp://123.56.249.139:9001/spu/goods/slow/10000005620800测试结果:RT、TPS、网络IO、CPU、内存、磁盘IO

Tomcat的默认线程数是200

可以理解为与IO模型有关系,因为当前使用的是阻塞式IO模型。这个问题我们在服务容器优化部分解决。

因为是使用的是NIO,阻塞了之后我们前面配置的是超过3s就会报错,所以报异常了。

使用JMeter做大并发压力测试的场景下,单机受限与内存、CPU、网络IO,会出现服务器压力还没有上去,但是压测机压力太大已经死机!为了让JMeter拥有更强大的负载能力,JMeter提供分布式压测能力。

如下是分布式压测架构:

注意:在JMeterMaster节点配置线程数10,循环100次【共1000次请求样本】。如果有3台Salve节点。那么Master启动压测后,每台Salve都会对被测服务发起10x100次请求。因此,压测产生的总样本数量是:10x100x3=3000次。

搭建JMeterMaster控制机和JMeterSalve施压机

搭建注意事项:

与Window中安装JMeter一样,略

(1)下载安装

#1.改ipvimjmeter-server#RMI_HOST_DEF=-Djava.rmi.server.hostname=本机ip#2.改端口vimjmeter.properties#RMIporttobeusedbytheserver(muststartrmiregistrywithsameport)server_port=1099#Tochangethedefaultport(1099)usedtoaccesstheserver:server.rmi.port=1098(3)配置rmi_keystore.jks

(4)启动jmeter-server服务

(2)Salve启动,并监听1099端口。

(3)在JMeterMaster机器安装目录bin下,找到jmeter.properties文件,修改远程主机选项,添加3个Salve服务器的地址。

remote_hosts=172.17.187.82:1099,172.17.187.83:1099,172.17.187.84:1099

THE END
1.组织习题新浪教育5.从案例中可以看出,在电子产品设计和生产上:( ) A.日本企业具有领先的技术优势 B.英特尔公司在先导技术上具有持续领先的地位 C.价格比性能和质量更重要 D.产品寿命周期缩短 6.80年代早期,英特尔公司在386微处理器市场上处于:( )A.垄断竞争B.完全垄断C.完全竞争D.寡头垄断 ...https://edu.sina.com.cn/l/2003-09-22/53619.html
1.家电产品工业设计的失败案例(一款家电产品的工业设计需要考虑哪些...在家电行业中,产品工业设计起着至关重要的作用。然而,有些家电产品在工业设计方面存在着一些失败案例,这给消费者带来了不便和困扰。 缺乏人性化设计 一些家电产品在设计过程中忽视了人性化的考虑,导致使用起来不够便捷和舒适。例如,某款洗衣机的按键布局非常混乱,使得用户在操作时经常按错按钮。另外,某款冰箱的把手设...https://www.jbairui.cn/NEWS/7894.html
2.8个案例教你在产品设计中使用ChatGPT–UXRen社群在我们的案例中,一个好的产品简介将帮助我们为产品创建一个可靠的网站。ChatGPT 可以写出相当不错的产品简介,但将生成的产品简介与产品设计中实际使用的产品简介进行比较时,会发现它(生成的产品简介)没有提供产品设计师所需的基本细节。例如,有关目标受众的信息非常有限。https://www.uxren.cn/?p=74760
3.5个试图很酷但失败的广告策划设计案例分析声明:案例评论仅供交流学习,评论中所使用图片来自网络,一切权利归原作者所有,本案例非德启出品 多年来,许多非常成功的广告活动要么顺应了流行文化的潮流,要么在某些情况下,成功地颠覆了现状,获得了自己的追随者。 一个好的广告本身就是一种艺术形式,通过结合杀手级创意、娴熟的执行和最高的生产价值来提升品牌的可信度...https://www.thekeybrand.cn/29924.html
4.产品设计经典案例(一):违背客观事实在B端产品设计当中,理解和满足用户的真实需求是至关重要的。然而,在现实操作中,设计者有时候会基于错误的信息、个人偏见、不正确的市场研究、或设计者自身加戏过度导致产品设计违背了事实的需求,从而带来了失败的案例。本文将以我工作中犯的一个经典案例来探讨这种问题,并提供相应的启示。 https://www.jianshu.com/p/446d1f4da151
5.好用户体验设计案例分享(七个情境)在开始分享案例前,我想先来谈谈好的UX设计是什么? Usability易用性:产品设计符合符合用户的习惯与需求,用最少的努力发挥最大的能量。 Beautiful美观:产品功能达到目的后,视觉上有好的比例、构图、重要信息放在适当的位置,都能让用户体验更好 Pleasurable愉悦:让用户体验提升到另一个层次,加上一些小心思,不论是文案...http://www.360doc.com/content/18/0918/22/32818234_787798580.shtml
6.SaaS产品从0到1的产品方案设计与案例腾讯云开发者社区4)多组织架构设计 接下来,我们挨个进行阐述。 1、方案概要说明 该部分内容主要说明产品的定位,以及MVP版本的范围。这也是B端产品从0到1,产品方案最核心的部分。 方案概要说明包含以下三部分内容: 1)产品定位: 定位决定成败。大部分产品失败的原因,都是没有回答好以下三个问题: ...https://cloud.tencent.com/developer/article/1847684
7.人工智障2:你看到的AI与智能无关机器之心要让AI能处理这样的新条件,得在“订机票”这张表上,新增加“航空公司”一栏(黄色部分)。而这个过程,都得人为手动完成:产品经理设计好后,工程师编程完成这张表的编程。 所以AI并不是真的,通过案例学习就自动理解了“订机票”这件事情,包含了哪些因素。只要这个表还是由人来设计和编程实现的,在产品层面,一旦用户...https://www.jiqizhixin.com/articles/2019-01-21-2
8....案例!WeGame2.0视觉升级复盘(品牌篇)优设网综上所述,我们将 WeGame2.0 的设计目标,定为以下三点:首先是配合产品战略升级,刷新品牌调性;然后在继承核心品牌基因的基础上,植入新调性以刷新品牌设定;以及探索更多维度更多形式,不断的深化品牌应用,拓宽品牌边界。 而在设计执行上会具体的分为品牌调性、品牌设定和品牌应用三大实施步骤。 https://www.uisdc.com/wegame2-0
9.10大品牌策划经典案例分析从品牌视觉包装设计到品牌全案战略落地执行 企业的品牌视觉管家 业务范围:品牌设计、品牌诊断、品牌定位、品牌命名、品牌设计、品牌设计(VI设计,logo设计,画册设计,包装设计,IP吉祥物设计,空间设计,海报设计,文创产品设计,网站设计等),网络推广,市场推广,品牌年度管理。 https://www.duooo.net/baike/738.html
10.混合云嘲下"监管控"的设计模型及规则MySecretRainbow在大屏设计场景中,除了梳理业务、选择展现方式以外,也需要思考每个空间对观者的重要性;不浪费页面的每一寸“土地”,并且让“土地”的设计令用户感到愉悦、一目了然,还能快速获取到想要的信息。 对于运维人员主要是通过资源监控 , 发现告警 ,进行资源运维 ,在混合云运维平台产品维度监控案例里 , 设计需要反应多层级架...http://www.mysecretrainbow.com/blog/21113.html
11.创新案例从技术至上到以人为本:苹果的设计思维之路–Runwise.co2022年5月11日,苹果官方正式宣布iPod产品线正式停更,这款带领苹果东山再起,见证其涅槃重生的产品,结束了其21年的舞台时光。苹果也曾是“技术至上”极客思维的信奉者,只是在遭遇市场滑铁卢之后痛定思痛,回归到“以人为本”的设计思维。设计团队是苹果最核心的部门,尽管其成立远早于设计思维概念的提出,但纵观苹果产品...https://runwise.co/applied-leadership/design-thinking/138235.html
12.工商管理案例分析论文(精选12篇)工商管理案例分析论文 篇1 摘要:但是在我国企业的生产经营中存在着许多问题,其问题的出现主要表现在企业内部的管理结构不完善、风险管理不健全等方面。企业为了提高自身的竞争优势,获得最后的成功,就要做好企业产品的开发和营销工作,实现两者之间的协调统一,互相配合,从而有力的促进企业的健康顺利发展。本文通过结合相应的...https://bylw.yjbys.com/gongshangguanli/106137.html
13.产品原型图怎么画?教你从0到1画出产品原型!产品原型图是产品设计的基础模型、形式或实例,产品原型图经过不停的迭代,可以派生出现有产品的新模型或新版本。 2. 原型图怎么画 我们以产品计时器为案例,分步骤讲解如何从0到1绘制一个产品原型图。 2.1 绘制产品概念草图 画出计时器的概念草稿图,有助于后面细化产品原型图,我们可以借助在线协同产品设计工具Pixso快...https://pixso.cn/designskills/how-to-draw-the-product-prototype/
14.工商管理案例分析范文6篇(全文)(3)尽量减少因品种多变而导致附加配送成本,尽可能多地采用标准零部件、模块化产品采用标准化策略要求厂家从产品设计开始就要站在消费者的立场去考虑怎样节省配送成本,而不要等到产品定型生产出来了才考虑采用什么技巧降低配送成本。 格兰仕的运营管理最关注的是成本和效率,这从格兰仕的组织管理和业务部门管理都得到很好的...https://www.99xueshu.com/w/fileawz3b1f2.html
15.大家常说的用户思维,你真的理解透了吗?下面,我们分别通过一些案例,来看看产品思维在“产品设计、市场营销、日常生活”当中的体现。 用户思维的体现 一、产品设计领域 案例1 | 空气净化器的用户思维缺失,导致净化无效 飞利浦有一款空气净化器,购买时会随机器附带四层滤网。但这四个滤网并没有分开包装, 而是提前安装在机器中。 https://www.digitaling.com/articles/39142.html