千家信息网

如何进行Spring Boot项目优化和JVM调优

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家介绍如何进行Spring Boot项目优化和JVM调优,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。项目调优作为一名工程师,项目调优这事,是必须得熟练掌握的事情。在
千家信息网最后更新 2026年11月02日如何进行Spring Boot项目优化和JVM调优

这篇文章给大家介绍如何进行Spring Boot项目优化和JVM调优,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

项目调优

作为一名工程师,项目调优这事,是必须得熟练掌握的事情。在 Spring Boot 项目中,调优主要通过配置文件和配置JVM的参数的方式进行。

1. 修改配置文件

关于修改配置文件 application.properties,推荐《Spring Boot 项目详细的配置文件修改文档》

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

其中比较重要的有:

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.

2. JVM 调优

关于 JVM 调优 Oracle 官网有一份指导说明,有兴趣大家可以去看看。《Oracle 官网对 JVM 调优的说明》

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

3. JVM调优实战

3.1 未设置JVM参数的情况

现在有一个项目,默认情况下没有设置任何 JVM 参数。下面我来启动看一下。

看一下堆栈分配,默认的最大堆内存分配了 8G,很明显不合理嘛。

3.2 下面我们来设置下 JVM 参数

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

-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC

方式一

如果你用的是 IDEA 等开发工具来启动运行项目,那么要调试 JDK 就方便太多了。只需要将参数值设置到 VM Options 中即可。

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

堆栈分配:

方式二

适用于在项目部署后,在启动的时候,采用脚本或者命令行运行的时候设置。先在项目路径下给项目打包,清理旧项目:

$ mvn clean

打包新项目:

$ mvn package -Dmaven.test.skip=true

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

执行启动设置 JVM 参数的操作:

$ 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 (元空间最大大小)

JDK8 开始把类的元数据放到本地化的堆内存(native heap)中,这一块区域就叫Metaspace,中文名叫元空间。

使用本地化内存有什么好处呢?

最直接的表现就是 java.lang.OutOfMemoryError: PermGen 空间问题将不复存在。因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上 Metaspace 就可以有多大,这解决了空间不足的问题(貌似容量还与操作系统的虚拟内存有关?这里不太清楚)。

不过,让 Metaspace 变得无限大显然是不现实的,因此我们也要限制 Metaspace 的大小:使用 -XX:MaxMetaspaceSize 参数来指定 Metaspace 区域的大小。JVM 默认在运行时根据需要动态地设置 MaxMetaspaceSize 的大小。

关于如何进行Spring Boot项目优化和JVM调优就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

项目 大小 参数 空间 内存 配置 分配 最大 堆栈 文件 时候 运行 方式 日志 兴趣 内容 区域 情况 数据 文档 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 互联网是第几次科技革命的成果 互联网科技行业发展 成都互联网科技公司 凡科互联网科技 碳银互联网科技有限公司 左右互联网络科技 深圳卡尔迅互联网科技有限公司怎么样 栖莱科技互联网股份有限公司 互联网科技与大数据专业 注册互联网科技公司经营范围大全 广州市恰铎互联网科技有限公司 乌鲁木齐新华智原互联网科技学校 佛山市翊博互联网络科技有限公司 阿里互联网科技企业 科技赋能视角下互联网保险发展 徐州市互联网科技有限公司 怎样加入科技互联网 中国互联网有什么科技 互联网科技新闻 互联网是第几次科技革命的成果 互联网金融科技平台 上游互联网科技 互联网科技公司招聘 广州慧亚互联网科技怎么样 贵州叶脉互联网科技有限公司所属行业 互联网公司黑科技创始人 互联网金融科技元年 深圳互联网科技的发展 广州全民伙伴互联网科技有限公司
0