项目压测优化实践思路项目性能优化性能问题分析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.天准科技2023年年度董事会经营评述公司根据产品设计方案及产品生产所需的原材料成本为基础,并综合考虑产品的技术要求、设计开发难度、创新程度、产品需求量、生产周期、下游应用行业及竞争情况等因素,确定产品的价格。同时,公司持续跟踪产品的具体情况,在出现设计优化、原材料价格波动、汇率波动及出口退税政策变化等必要情形时,及时对产品价格进行相应的调整...http://yuanchuang.10jqka.com.cn/20240419/c657091174.shtml
2.设计产品UED为了使用户在使用产品时能够获得一致的体验效果,小米IoT 平台根据产品的特征和用户的使用体验,统一了设备和用户的交互方式,小米IoT 平台强烈建议开发者在设计产品时,参考本文档的内容,合理地设计产品的UED。说明: 已出海的产品为了符合海外用户的使用需求和出海地区的政策要求,避免出现违规等事项,请参考设备UED 适配 中...https://iot.mi.com/new/doc/tools-and-resources/design/device-ued
3.超失败包装设计:分分钟让人想歪超失败包装设计:分分钟让人想歪 设计奇葩 想要让商品卖得好,除了可靠的品质之外还需要夺目的包装。 但有时设计师或者包装工的一个疏忽就会让产品的整个画风转变。听起来很棒的创意结果却分分钟变得超邪恶,让人不得不想歪。 下面就是一些超失败的包装设计,别说不是故意的……...https://news.mydrivers.com/1/512/512897.htm
4.产品项目复盘(方法论+案例)另外,产品经理核心的能力之一,就是总结能力,将收集到的需求建议、竞品优势等进行归纳整理,结合项目自身的差异点才能形成自己的需求思路。复盘能够帮助你快速反思自己的不足,及时纠正。 2、从0到1建立制度或制度迭代 将问题找出其成功或失败的关键点,知其然,而知其所以然,要有意义的失败,避免无意义的成功。同时将处...https://www.jianshu.com/p/b09b1a910d71
5.API接口设计和业务逻辑产品、研发、测试可以根据接口文档进行产品设计、开发、测试,毫不夸张的说懂得了接口设计,间接就懂了产品的设计思路。 剩下的工作无非是对细节的填充和文档以及对外沟通讲解,授人以鱼不如授人以渔,我的文章只主要讲渔,一些实例作为示范,以达到知行合一的效果。 https://www.niaogebiji.com/article-164415-1.html
6.设计心理学调研报告.pptx品牌设计心理学05案例分析AppleWatch案例一Nest恒温器案例二TeslaModelS案例三优秀产品设计案例通常具备创新性、实用性、美观性和情感价值,能够满足用户需求并提供良好的用户体验。总结优秀产品设计案例失败产品设计案例案例一MicrosoftZune案例二GoogleGlass案例三ToshibaLibretto总结失败的产品设计往往缺乏市场调研和用户需求分析,...https://www.renrendoc.com/paper/308618155.html
1.家电产品工业设计的失败案例(一款家电产品的工业设计需要考虑哪些...在家电行业中,产品工业设计起着至关重要的作用。然而,有些家电产品在工业设计方面存在着一些失败案例,这给消费者带来了不便和困扰。 缺乏人性化设计 一些家电产品在设计过程中忽视了人性化的考虑,导致使用起来不够便捷和舒适。例如,某款洗衣机的按键布局非常混乱,使得用户在操作时经常按错按钮。另外,某款冰箱的把手设...https://www.jbairui.cn/NEWS/7894.html
2.一个视觉交互设计失败的案例最近在做产品设计时,遇到了一个非常典型的设计失败案例。这个案例反应了一些老生常谈的问题,我觉得非常有意思。 好看的设计未必好用 我负责的是一款秀场类产品,近期要在移动端中添加一个模块,模块主要的功能是展示主播的录播视频。下面展示一下原型图和效果图的对比。 https://blog.csdn.net/pmcaff2008/article/details/78889622
3.第二部分:shimano历史上十大失败的产品和设计盘点好了,关于shimano历史上的十大失败产品和设计盘点第二部分就到这里结束了,等我有了更多的资料再慢慢更新吧,包括其他品牌也在努力工作中。那就先这样了,我们下期再见,单车基械匠,每天给您带来更多新奇,好玩,有趣,实用的单车知识。 扩展阅读:第一部分:shimano历史上十大失败的产品和设计...https://www.yoojia.com/article/9992062941029509560.html
4.一个失败的创业案例和一个价值百亿的产品设计一个失败的创业案例和一个价值百亿的产品设计 2021年,偶然一次开车,用高德导航,发现星巴克的POI页面打通了支付宝小程序,可以实现地图内点餐、到店取的功能。 我觉察到本地生活行业开始有了多渠道营销的趋势。 后来,小红书也传出可以站内跳转微信小程序,内测了GUCCI等品牌公域到私域的跳转路径。https://finance.sina.cn/stock/relnews/hk/2024-05-06/detail-inauihut8912364.d.html
5.设计界的奥斯卡!2020年德国iF金奖作品赏析!(完整版)中国获奖设计作品达9件 今天就跟着老工来看看 今年又有哪些好设计~ 产品设计类 01、Mi手持式吸尘器 设计:小米公司(中国) Mi手持吸尘器白色、橙色和银色的标志性配色方案突显了它的功能细节,创造出一种迷人的设计语言。是价格合理的优质产品。另外,它使用起来非常容易。 https://www.360doc.cn/article/20854507_895829241.html
6.谈360路由失败:懒惰和自以为是的产品设计其实真不是诺基亚做的不好,而是他们的员工过得太好了,在一家拼下午茶和咖啡甜点的口味和档次的公司里面,人是很难有危机感的。 360路由器,再做下去,也注定如此吧。 希望说到这里,给那些正在创业和打算创业的朋友们会有些信心了。巨头其实不可怕,可怕的是懒惰和自以为是的产品设计。https://www.szhv.cn/school/yunying/1409758189-2815.shtml
7.创业者谈360路由失败:懒惰和自以为是的产品设计雷峰网创业者谈360路由失败:懒惰和自以为是的产品设计 为什么说苹果涉足移动支付服务的胜算更大? 编者按:本文来自谛听科技创始人兼CEO李程的投稿。需要说明,这是一篇充满"情感“的文章,由于早前的种种原因,李程对这款安全路由的评论颇具个人色彩。但作为一家同做智能路由产品的公司,其观点不妨一读。https://www.leiphone.com/news/201409/guTKjGf6xf3zFBxo.html
8.德国工业设计,产品设计,交互设计作品集分享大概在三年前,因为大家都没钱吃饭,所以一拍即合,来自柏林艺术大学产品设计专业的我,和我的搭档:来自Kiel美院的大神Elva(小莫老师),开始辅导第一个学生做申请德国设计院校的产品设计作品集。 如今三年过去了,我们带的3届的学生都拿到了学校面试邀请,作品集过关率100%。向着德国产品设计大神的目标继续奋斗着。 https://www.douban.com/note/768375177
9.全球好设计!2020年德国iF设计金奖出炉(完整版),中国喜提9件!大家好,我是象君。最近,2020德国iF大奖揭晓了。在7298件作品中有74件作品获得金质奖,其中中国获奖的设计作品有9件。今年又诞生了哪些好设计?我们一起来看看吧。 01 产品设计 Mi手持式吸尘器 设计:小米公司,中国 制造商:北京罗博洛克科技有限公司,中国 https://www.digitaling.com/articles/256962.html
10.品质管理知识有哪些2、把企业各部门、各环节的生产经营活动严密地组织起来,规定它们在品质管理方面的职责、任务和权限;3、建立组织和协调这些活动的组织机构;4、以最经济的水准,提供使顾客满意的产品及服务。) 品质管理所依据的资源:(1、首先是产品设计规格,它是品质管理所遵循的规范。产品能达到什么样的水准取决于设计时产品的规格。https://www.jy135.com/guanli/30602.html
11.专访慈善赌王:最遗憾的事情就是收购雪缘园失败体坛大牌:产品设计由你亲自出马? 慈善赌王:该产品软件由我策划设计,肯定有慈善赌王的经验元素容纳在软件里面。软件上线前大家可以关注我微信公众号:oddscn。或者新浪微博:慈善赌王。微信公众号刚刚做一个月时间,现在关注人数才俩千来人。新浪微博大概有俩三万人关注。现在每天基本上坚持在公众号和新浪彩票发布一条用亚...https://www.ttplus.cn/publish/app/data/2016/02/09/3920/os_news.html
12.研发费用加计扣除政策执行指引(2.0版)—政策法规—科服网3.企业为获得创新性、创意性、突破性的产品进行创意设计活动而发生的相关费用,可以按照规定进行加计扣除。 4.企业可在当年7月份预缴、10月份预缴以及企业所得税年度汇算清缴时申报享受研发费用加计扣除政策。 (二)政策沿革 现行企业所得税法和实施条例明确研发费用可享受加计扣除。近年来,国家多次优化完善研发费用加计...https://i.tten.cn/news/zcfg/202307/t20230710_163268.html
13.钛坦白新零售,线上线下结合不是说的那么简单产品的设计上,优衣库是通过全球的店面实时反馈的销售信息进行产品的辅助设计,换句话是什么意思呢?由全球门店收集客户喜欢的信息设计产品,在产品设计上他们是围绕用户来生产,也就有点像现在的C2B,或者是C2F这样的模式。 所以优衣库定位“快时尚”理念,得益于它实时反馈的系统。对数据进行了精准化的分析后,每一年的款式...https://www.tmtpost.com/2927783.html