Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot深度调优,让你的项目飞起来!

SpringBoot深度调优,让你的项目飞起来!

作者头像
Rookie
发布于 2019-09-29 07:12:23
发布于 2019-09-29 07:12:23
46000
代码可运行
举报
文章被收录于专栏:成猿之路成猿之路
运行总次数:0
代码可运行

项目调优

作为一名工程师,项目调优这事,是必须得熟练掌握的事情。

在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。

在这边有一篇比较好的文章,推荐给大家!

https://zhuanlan.zhihu.com/p/31803182

一、修改配置文件

关于修改配置文件application.properties。

SpringBoot项目详细的配置文件修改文档

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#common-application-properties

其中比较重要的有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server.tomcat.max-connections=0 # Maximum number of connections that the server accepts and processes at any given time.
server.tomcat.max-http-header-size=0 # Maximum size, in bytes, of the HTTP message header.
server.tomcat.max-http-post-size=0 # Maximum size, in bytes, of the HTTP post content.
server.tomcat.max-threads=0 # Maximum number of worker threads.
server.tomcat.min-spare-threads=0 # Minimum number of worker threads.

二、Jvm调优

关于Jvm调优Oracle官网有一份指导说明:

https://docs.oracle.com/middleware/11119/wls/PERFM/jvm_tuning.htm#i1146060

有兴趣大家可以去看看。

三、Jvm调优实战

1、未设置JVM参数的情况

我现在有一个项目,默认情况下,没有设置任何Jvm参数。

下面我来启动看一下。

看一下堆栈分配:

很明显默认的最大堆内存分配了8个G。很明显的不合理嘛。

2、下面我们来设置下Jvm参数

例如要配置JVM这么一大段参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 -XX:MetaspaceSize=128m 
 -XX:MaxMetaspaceSize=128m 
 -Xms1024m -Xmx1024m -Xmn256m 
 -Xss256k -XX:SurvivorRatio=8
 -XX:+UseConcMarkSweepGC

方式一:

如果你用的是IDEA等开发工具,来启动运行项目,那么要调试JDK就方便太多了。

只需要将参数值设置到VM options中即可。

设置成功,我的GC日志和堆栈分配都已经OK了。

GC日志:

堆栈分配:

方式二:

适用于在项目部署后,在启动的时候,采用脚本或者命令行运行的时候设置。

先在项目路径下,给项目打包:

清理就旧项目

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn clean

打包新项目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 mvn package -Dmaven.test.skip=true

打包完成后进入可运行Jar包的路径下:

执行启动设置Jvm参数的操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ java -jar -XX:MetaspaceSize=128m
 -XX:MaxMetaspaceSize=128m
 -Xms1024m -Xmx1024m -Xmn256m -Xss256k
 -XX:SurvivorRatio=8
 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar

这个时候,你再看监控,你就会发现,已经是Ok的了。

堆栈都是按照启动时候,设置的Jvm参数启动的。

关于这些设置的JVM参数是什么意思,请参考第二步中的oracle官方给出的调优文档。

我在这边简单说一下:

-XX:MetaspaceSize=128m (元空间默认大小) -XX:MaxMetaspaceSize=128m (元空间最大大小) -Xms1024m (堆最大大小) -Xmx1024m (堆默认大小) -Xmn256m (新生代大小) -Xss256k (棧最大深度大小) -XX:SurvivorRatio=8 (新生代分区比例 8:2) -XX:+UseConcMarkSweepGC (指定使用的垃圾收集器,这里使用CMS收集器) -XX:+PrintGCDetails (打印详细的GC日志)

知识点:

JDK8之后把-XX:PermSize 和 -XX:MaxPermGen移除了,取而代之的是 -XX:MetaspaceSize=128m (元空间默认大小) -XX:MaxMetaspaceSize=128m (元空间最大大小) JDK 8开始把类的元数据放到本地化的堆内存(native heap)中,这一块区域就叫Metaspace,中文名叫元空间。 使用本地化的内存有什么好处呢?最直接的表现就是java.lang.OutOfMemoryError: PermGen 空间问题将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上Metaspace就可以有多大(貌似容量还与操作系统的虚拟内存有关?这里不太清楚),这解决了空间不足的问题。 不过,让Metaspace变得无限大显然是不现实的,因此我们也要限制Metaspace的大小:使用-XX:MaxMetaspaceSize参数来指定Metaspace区域的大小。JVM默认在运行时根据需要动态地设置MaxMetaspaceSize的大小。

好啦,祝大家学习和工作顺利啦!

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 成猿之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
五分钟搞定!Spring Boot项目优化和JVM调优
作为一名工程师,项目调优这事,是必须得熟练掌握的事情。在Spring Boot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。
田维常
2021/12/06
2.9K0
五分钟搞定!Spring Boot项目优化和JVM调优
数据库调优 项目调优
一般项目默认采用的是@SpringBootApplication注解来自动获取应用的配置信息 ,对于项目比较大可能会遇到的问题有
java攻城狮
2020/10/10
8240
Java堆内存设置
Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。
码客说
2020/05/09
3.4K0
SpringBoot2.x基础篇:Linux后台运行Jar以及Jvm参数调优
我们将编写的应用程序打包为Jar可执行文件后,如果在Linux服务器环境下,可直接使用java -jar xxx.jar命令运行应用程序,不过当我们关闭命令窗口后启动中的应用程序也会停止,那我们需要通过什么方式才可以成为后台服务方式运行呢?
恒宇少年
2020/02/25
1.7K0
SpringBoot2.x基础篇:Linux后台运行Jar以及Jvm参数调优
Linux 服务器上如何通过 Shell 脚本一键部署 SpringBoot 应用
springboot 是默认集成Tomcat容器的,将项目打包成jar包库、使用Java直接启动jar包(非spring boot也可以)
IT小马哥
2020/03/18
2K0
Nacos 内存参数修改调优
在Spring Cloud项目中我们经常会用到Nacos,但如果只是在测试环境或者微服务数量相对比较少时,采用Nacos默认的JVM配置会浪费很多资源。特别是那些低配置用来研究的服务器。
程序新视界
2021/12/07
5.4K0
SpringBoot-打包&部署
SpringBoot 项目支持两种打包方式,一种是 WAR 包,然后在 Tomcat 上部署运行,一种是 JAR 包,内置了 Tomcat,可以直接运行。
每周聚焦
2025/02/11
2880
SpringBoot-打包&部署
虚拟机11.JVM调优_调优方法
虚拟机11.JVM调优_调优方法 ENTER TITLE JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里 JProfiler:商业软件,需要付费。功能强大。详细说明参考这里 VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。 如何调优 观察内存释放情况、集合类检查、对象树 上面这些调优工具都提供了强大的功能,但是总的来说一般分为以下几
Java帮帮
2018/03/15
9810
虚拟机11.JVM调优_调优方法
一定要记住的14个JVM内存配置参数
Notice:这里我们默认以Linux JAVA8 hotspot环境为例,其Oracle官网Java Platform, Standard Edition Tools Reference(这里面有详细参数配置说明)。
XING辋
2019/03/26
18.9K0
一定要记住的14个JVM内存配置参数
生产环境下JVM调优参数的设置实例
◆ NewSize较大,old gen 剩余空间64m,一方面可能会带来old区容易增长到报警范围(监控数据显示oldgenused长期在50m左右,接近78%,容易出现full gc),另一方面也存在promontion fail风险。
小勇DW3
2018/08/30
1.9K0
JVM 内存区域大小参数设置
需要提前了解的知识点: JVM内存模型 JVM垃圾回收算法 下图是JVM内存区域划分的逻辑图 JVM内存区域逻辑图 从图中我们大概了解JVM相关的内存区域。 JVM内存包括区域 Heap(堆区) Ne
java404
2018/05/18
5K0
理论:第九章:JVM内存模型,算法,垃圾回收器,调优,四大引用,常见的JVM错误,类加载机制(双亲委派),创建一个对象,这个对象在内存中是怎么分配的?
查看JVM修改更新的内容:java -XX:+PrintFlagsFinal -version
Java廖志伟
2022/09/28
8670
理论:第九章:JVM内存模型,算法,垃圾回收器,调优,四大引用,常见的JVM错误,类加载机制(双亲委派),创建一个对象,这个对象在内存中是怎么分配的?
JVM GC调优一则--增大Eden Space提高性能
线上有Tomcat升级到7.0.52版,然后有应用的JVM FullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增。
天涯泪小武
2019/06/26
4K0
JVM GC调优一则--增大Eden Space提高性能
【详解】JVM调整java虚拟机可使用的最大内存
在Java应用程序的开发和部署过程中,合理地配置Java虚拟机(JVM)的内存参数对于提升应用性能至关重要。本文将详细介绍如何通过JVM参数来调整Java虚拟机可使用的最大内存,帮助开发者优化应用性能。
大盘鸡拌面
2025/01/16
1950
JVM内存模型详解「建议收藏」
程序计数器:较小的内存空间, 当前线程执行的字节码的行号指示器;各线程之间独立存储,互不影响;
全栈程序员站长
2022/09/05
3.4K0
JVM内存模型详解「建议收藏」
7.JVM调优-方法区,堆,栈调优详解
通常我们都知道在堆空间新生代Eden区满了,会触发minor GC, 在老年代满了会触发full GC, 触发full GC会导致Stop The World, 那你们知道还有一个区域满了一会触发Full GC么?而且这个区域满了会直接影响我们的开发效率。
用户7798898
2021/10/13
8320
面试官:怎么做JDK8的内存调优?
面试官:怎么做JDK8的内存调优? 看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题。擦了擦额头上汗😓,我稍微调整了一下紧张的情绪😥,对面试官说: 在内存调优之前,需要先了解JDK8的内存区域是怎么划分的: JDK8内存结构 JDK8的内存结构主要包括程序计数器(Program Counter Register)、虚拟机栈(Java Virtual Machine Stacks)、本地方法栈(Native Method Stacks)、堆(Java Heap)、元空间(Metasp
万猫学社
2022/04/22
6860
面试官:怎么做JDK8的内存调优?
高并发场景下JVM调优实践之路
通过监控发现,接口响应慢主要是P99耗时高引起的,怀疑与该服务的GC有关,该服务典型的一个实例GC表现如下图:
2020labs小助手
2021/11/01
1.7K0
JVM调优1个月,性能提升400倍!怎样做到的?
通过这一个多月的努力,将FullGC从40次/天优化到近10天才触发一次,而且YoungGC的时间也减少了一半以上,这么大的优化,有必要记录一下中间的调优过程。
架构师修炼
2022/01/04
7110
JVM调优1个月,性能提升400倍!怎样做到的?
JVM调优1个月,性能提升400倍!怎样做到的?
导读:本文记录一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程,总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发。
码农架构
2022/01/07
9440
JVM调优1个月,性能提升400倍!怎样做到的?
推荐阅读
相关推荐
五分钟搞定!Spring Boot项目优化和JVM调优
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验