版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文由简悦SimpRead转码,原文地址在开始对SpringBoot服务进行性能优化之前,你需要做一些准备,把SpringBoot服务的一些数据暴就需要把连接池的参数给暴露出来。我们这里采用的监控工具是本文由简悦SimpRead转码,原文地址在开始对SpringBoot服务进行性能优化之前,你需要做一些准备,把SpringBoot服务的一些数据暴就需要把连接池的参数给暴露出来。我们这里采用的监控工具是Prometheus,它是一个是时序数据库,能够存储我们的指标。PrometheusSpringBootmaven<artifactId>spring-boot-starter-<artifactId>micrometer-registry-<artifactId>micrometer-然后,我们需要在perties启动之后,我们就可以通过访问监控接口想要监控业务数据也是比较简单的,你只需要注入一个MeterRegistry启动之后,我们就可以通过访问监控接口想要监控业务数据也是比较简单的,你只需要注入一个MeterRegistry码:MeterRegistrypublicStringtest()"from","method",returntest_total{from="",method="test",}这里简单介绍一下流行的Prometheus监控体系,Prometheus使用拉的方式获取监控数据,这个暴露数据的过程可以交给功能更加齐全的returntest_total{from="",method="test",}这里简单介绍一下流行的Prometheus监控体系,Prometheus使用拉的方式获取监控数据,这个暴露数据的过程可以交给功能更加齐全的telegraf组件。如上图,我们通常使用Gafana进行监控数据的展示,使用AlertManager分的搭建工作不是我们的重点,感兴趣的同学可自行研究。下图便是一张典型的监控图,可以看到RedisJava火焰图火焰图也可以用来分析Java应用。可以从github上下载async-profiler的压缩包进行相关操作。比/root/javaagentJava应用,命令行如下:java-agentpath:/root/build/libasyncProfiler.so=start,svg,file=profile.svg-spring-petclinic-2.3.1.BUILD-java-agentpath:/root/build/libasyncProfiler.so=start,svg,file=profile.svg-spring-petclinic-2.3.1.BUILD-运行一段时间后,停止进程,可以看到在当前目录下,生成了pofile.svg览器打开的。明它可能是一个瓶颈。一层层向下浏览,即可找到需要优化的目标。对一个普通的Web如下图,在浏览器中输入相应的域名,需要通过DNS解析到具体的IP地址上,为了保证高可用,我们的服务一般都会部署多份,然后使用Nginx做反向代理和负载均衡。NginxSpringBootSpringBoottomcatWebMVC模式,最终访问到我们的数HTTP下面我们举例来看一下,哪些动作能够加快网页的获取。为了描述方便,我们仅讨论HTTP1.1协议CDNCDN(ContentDelivery下面我们举例来看一下,哪些动作能够加快网页的获取。为了描述方便,我们仅讨论HTTP1.1协议CDNCDN(ContentDeliveryNetwork)分发,甚至是一些常用的前端脚本、样式、图片等,都可以放到CDN上。CDN通常能够加快这些文件的获取,网页加载也更加迅速。浏览器会判断HTTP头Cache-Control的内容,用来决定是否使用浏览器缓存,这在管理一些静态文件这个参数可以在Nginxlocation~*^.+\.(ico|gif|jpg|jpeg|png)$缓存1add_headerCache-Control:no-cache,max-减少每个页面请求的域名数量,尽量保证在4个之内。这是因为,浏览器每次访问后端的资源,都需要先查询一次DNS,然后找到DNS对应的IP地址,再进行真正的调用。DNS有多层缓存,比如浏览器会缓存一份、本地主机会缓存、ISP服务商缓存等。从DNS到IP地址的转变,通常会花费20-120ms的时间。减少域名的数量,可加快资源的获取。开启开启gzip高传输效率。在nginxgzipgzip_min_lengthgzip_buffers4gzip_comp_levelgzip_http_versiongzip_typestext/plainapplication/javascript对JavaScript和CSS,甚至是HTML进行压缩。道理类似,现在流行的前后端分离模式,一般都是对这使用长连接可以显著减少网络交互,提高性能。nginx默认开启了对客户端的keepavlide对JavaScript和CSS,甚至是HTML进行压缩。道理类似,现在流行的前后端分离模式,一般都是对这使用长连接可以显著减少网络交互,提高性能。nginx默认开启了对客户端的keepavlidehttpkeepalive_timeout120skeepalive_requestsnginx与后端upstreamlocation~proxy_http_versionproxy_set_headerConnection如果你的项目并发量比较高,想要修改最大线程数、最大连接数等配置信息,可以通过自定义Web容@SpringBootApplication(proxyBeanMethods=publicclassAppimplementsWebServerFactoryCustomizer<ConfigurableServletWebServerFactory>{publicstaticvoidmain(String[]args)注意上面的代码,我们设置了它的协议为org.apache.coyote.http11.Http11Nio2Protocol,意思就是开启了Nio2。这个参数在Tomcat8.0注意上面的代码,我们设置了它的协议为org.apache.coyote.http11.Http11Nio2Protocol,意思就是开启了Nio2。这个参数在Tomcat8.0之后才有,开启之后会增加一部分性能。对比如下(测试项目代码见spring-petclinic-SpringApplication.run(PetClinicApplication.class,publicvoidcustomize(ConfigurableServletWebServerFactoryfactory)f.addConnectorCustomizers(c->[root@localhostwrk2-master]#./wrk-t2-c100-d30s-Running30stest@2threadsand100mean4588.131ms,ratemean4647.927ms,[root@localhostwrk2-master]#./wrk-t2-c100-d30s-Running30stest@2threadsand100mean4588.131ms,ratemean4647.927ms,rate +/-6471Socket0,0,0,Nio2[root@localhostwrk2-master]#./wrk-t2-c100-d30s-R2000Running30stest@2threadsand100Threadcalibration:meanlat.:4358.805ms,ratesamplinginterval:Threadcalibration:meanlat.:4622.087ms,ratesamplinginterval:Thread +/-7469Socket0,0,0,timeouttomcat7469Socket0,0,0,timeouttomcatundertow。undertowWeb容器,更加轻量级一些,占用的内<artifactId>spring-boot-starter-<artifactId>spring-boot-starter-<artifactId>spring-boot-starter-其实,对于tomcat优化最为有效的,还是JVM参数的配置,你可以参考上一课时的内容进行调整。比如,使用下面的参数启动,QPS由248上升到308。<artifactId>spring-boot-starter-其实,对于tomcat优化最为有效的,还是JVM参数的配置,你可以参考上一课时的内容进行调整。比如,使用下面的参数启动,QPS由248上升到308。对于一个web服务来说,最缓慢的地方就在于数据库操作。所以,使用“07|案例分析:无处不在的缓存,高并发系统的法宝和“08|案例分析:Redis如何助力秒杀业务”提供的本地缓存和分布式缓存优对于如何定位到复杂分布式环境中的问题,我这里想要分享另外一个工具:SkywalkingSkywalking是使用探针技术(JavaAgent)来实现的。通过在Java的启动参数中,加入javaagentJar包,即可将性能数据和调用链数据封装,并发送到Skywalking下载相应的安装包(如果使用ES存储,需要下载专用的安装包),将agenttarxvfskywalking-agent.tar.gz-C在业务启动参数中加入agentjava-jar/opt/test-service/spring-boot-demo.jar--java-javaagent:/opt/skywalking-agent/skywalking-agent.jarboot-demo.ja--files.active=dev访问一些服务的链接,打开Skywalking的UI,即可看到下图的界面。这些指标可以类比“01|析:性能优化,有哪些衡量指标?需要注意什么?”提到的衡量指标去理解,我们就可以从图中找到响应比较慢QPS又比较高的接口,进行专项优化。1.Controller1.Controllercontoller层用于接收前端的查询参数,然后构造查询结果。现在很多项目都采用前后端分离的架构,所以contoller层的方法,一般会使用@ResponseBody注解,把查询的结果,解析成JSON(兼顾效率和可读性)由于contoller据集的大小上。如果结果集合非常大,JSON解析组件就要花费较多的时间进行解析,假如结果集在解析成JSON之前,占用的内存是10MB,那么在解析过程中,有可能会使用20M或者我见过很多案例,由于返回对象的嵌套层次太深、引用了不该引用的对象(比如非常大的byte[]对所以,对于一般的服务,保持结果集的精简,是非常有必要的,这也是O(datatansfer存在的必要。如果你的项目,返回的结果结构比较复杂,对结果集进行一次转换是非常有必要的。2.Serviceservice层用于处理具体的业务,大部分功能需求都是在这里完成的。service很少会保存状态,而且可以被contoller复用。serviceserviceservice面课时提供的优化思路进行优化。如上图,四个操作分散在三个不同的资源中。要想达到一致性,需要三个不同的资源MySQL、MQ、ElasticSeach进行统一协调。它们底层的协议,以及实现方式,都是不一样的,那就无法通过如上图,四个操作分散在三个不同的资源中。要想达到一致性,需要三个不同的资源MySQL、MQ、ElasticSeach进行统一协调。它们底层的协议,以及实现方式,都是不一样的,那就无法通过提供的ansaction注解来解决,需要借助外部的组件来完成。手,因为它要使用额外的步骤去保证一致性,常用的方法有:两阶段提交方案、C、本地消息表、MQ事务消息、分布式事务中间件等。之间的名词,叫作柔性事务。柔性事务的理念是将业务逻辑和互斥操作,从资源层上移至业务层面。关系数据库,最大的特点就是事务处理,即满足ACID原子性(Atomicity):一致性(Consistency):系统必须始终处在强一致状态下。隔离性(Isolation):持久性(Durability):BASEBASEBasicallyAvailable、Soft-state、EventuallyconsistentBASE基本可用(BasicallyAvailable):软状态(Soft-state):系统不要求一直保持强一致状态。最终一致性(Eventualconsistency):复。3.Dao最终一致性(Eve
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF 2382-2026光谱共焦位移测量仪校准规范
- 选矿集控工诚信知识考核试卷含答案
- 有色金属矿干燥工班组评比能力考核试卷含答案
- 数控车工成果知识考核试卷含答案
- 选矿供料工成果水平考核试卷含答案
- 乳品配料工安全知识竞赛考核试卷含答案
- 2026年家政保洁人员聘用协议
- 2026 九年级下册历史《工业革命》课件
- 〈鸿门宴〉讲义课件
- 合肥三模理综试题及答案
- 2026年北京市西城区初三一模英语试卷(含答案)
- 电力重大事故隐患判定标准2026版解读
- 2026届湖南省常德市芷兰实验校中考联考数学试题含解析
- 2026年38期入团考试题及答案
- 2025年四川省广元市八年级地理生物会考考试真题及答案
- 饲料厂如何进行质量控制
- GB/T 9163-2001关节轴承向心关节轴承
- GB/T 26163.1-2010信息与文献文件管理过程文件元数据第1部分:原则
- 习作:《我学会了-》课件
- 西藏自治区山南市各县区乡镇行政村村庄村名居民村民委员会明细
- 公司各部门工作流程图(通用)
评论
0/150
提交评论