springboot性能优化
一、扫描优化
原文链接:http://www.studyshare.cn/blog-front/blog/details/1135
SpringBoot项目中的启动类,会使用@SpringBootApplication 注解,该注解的作用扫描外部依赖项目(例如:Tomcat,SpringMVC,Transaction等)以及运行一些自动配置类。
@SpringBootApplication注解中包含了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan等等,通过以下配置
通过debug启动项目在控制台中会打印出日志:
通过上面的日志可以看出需要扫描匹配的项=Positive matches: 需要匹配项 + Unconditional classes: 必须匹配项,那么扫描优化就是将这些需要匹配的项直接通过@import注解直接引入,则节省出扫描时间。例:
如果启动一个大的应用程序或者将做大量的集成测试启动应用程序的时候,这种优化方式可以减少启动时间,避免加载其他不必要的资源,减少CPU的消耗。
二、JVM参数调优
先了解两个配置指令
(1)-Xmx:设置最大的java堆大小
(2) -Xms:设置Java堆栈的初始化大小
idea工具中配置jvm内存大小
对当前应用程序的堆内存最大配置为32M,初始配置为10M(可以根据自己的项目适当缩小,有的项目缩小到1M或者更小会无法启动,本人的机器设置为1M就无法启动项目),设置好后,启动项目,控制台打印结果如下:
控制台会频繁的输出GC和Full GC,因为配置的堆内存太小的原因,堆内存配置越大,GC和Full GC会出现的越少。在生产项目中,-Xmx和-Xms这两个值应该配置相同,并根据运行服务器硬件环境适当去配置。频繁的GC和Full GC是非常消耗CPU的性能的,JVM优化的重要指标就是不能频繁出现Full GC。
监控应用的内存使用,可以使用jdk提供的工具在jdk安装bin目录下jvisualvm.exe
三、根据项目采用合适的容器
现在最流行也最常用的就是tomcat容器,tomcat是默认支持jsp的,当然也可以去优化tomcat,关闭tomcat对jsp的支持。如果不优化tomcat也可以在项目中更换使用其他容器,例如:Undertow,该容器默认是不支持jsp。减少一些其他不需要的支持来提升容器启动和运行效率。
首先在pom.xml中排除使用tomcat容器
加入对Undertow容器的依赖
启动容器运行结果:
测试性能是否提升可以使用jMeter压测工具:
在项目中分别使用Tomcat和Undertow容器,然后使用jMeter工具进行压测,然后对比分别使用两个容器的并发处理能力。
更多深度技术好文:http://www.studyshare.cn/blog-front/index
springboot性能优化的更多相关文章
- 【SpringBoot】SpringBoot性能优化
Spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题.但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代.Spring ...
- SpringBoot入门-SpringBoot性能优化
SpringBoot启动优化 显示声明扫包范围: 即不使用@SpringBootApplication默认扫包,使用@ComponentScan(basePackages = { "com. ...
- springboot(十二) SpringBoot 性能优化
代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo springboot优化主要有三类优化:1.包扫描优化 2. ...
- SpringBoot性能优化之HikariCP连接池
以前一直使用阿里Druid数据库连接池,这段时间听说有个号称速度最快.代码最简的后起之秀——HikariCP,于是动手实践一下 1.依赖如下: <?xml version="1.0&q ...
- Java的性能优化
http://www.toutiao.com/i6368345864624144897/?tt_from=mobile_qq&utm_campaign=client_share&app ...
- Spring Boot 性能优化
spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题.但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代.Spring ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- 03.SQLServer性能优化之---存储优化系列
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概 述:http://www.cnblogs.com/dunitian/p/60413 ...
- Web性能优化:What? Why? How?
为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...
随机推荐
- 对只转发结果集的无效操作:provious()
原因:结果集没有设置为可滚动 解决方法: 将stat = conn.createStatement(); 改为 stmt=conn.createStatement(ResultSet.TYPE_SCR ...
- Python读取和写入Excel文件
制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...
- 前后端数据交互处理基于原生JS模板引擎开发
json数据错误处理,把json文件数据复制到----> https://www.bejson.com/ 在线解析json 这样能直观的了解到是否是json数据写错,在控制台打断点,那里错误打那 ...
- 在图像中随机更改像素值程序——matlab
I=imread('C:\Users\wangd\Desktop\result3.png'); % m = rgb2gray(I); % r = unidrnd(,,); %产生一个1*100的数组, ...
- SSHD启动失败,错误码255
查看/etc/ssh/sshd_config 发现,Listen Address并不是我想要的ip,将其注释掉 sshd restart,结果返回 Permission denied (publick ...
- C#中Dispose,finalize,GC,析构函数区别
释放类所使用的未托管资源的两种方式: 1.利用运行库强制执行的析构函数,但析构函数的执行是不确定的,而且,由于垃圾收集器的工作方式,它会给运行库增加不可接受的系统开销. 2.IDisposable接 ...
- java 乱码问题集
场景1:刚复制来的java类乱码,反复修改无果 解:将java类用NotePat++打开,可正常显示,复制过来即可.
- vs2010直接调用av_register_all crash问题
需要做一个视频导出的功能,通过ffmpeg来实现,vs2010里面引用ffmpeg库的 dll 和 lib 文件 第一步av_register_all就直接crash了, 查了近半天的时间,都快崩溃了 ...
- 7.6.2 break 语句
7.6.2 break 语句 程序执行到循环中的break语句时,会种植包含它的循环,并继续执行下一阶段. 如果break语句位于嵌套循环内,它只会影响包含它的当前循环. break还可用于因其他原因 ...
- Java中final、finally、finalize有什么区别?
final.finally和finalize的区别是什么? final: 最终的意思,可以修饰类,方法和变量. 它修饰的类,不能被继承 它修饰的方法,不能被重写 它修饰的变量,不能被改变 finall ...