调整Jvm参数,让你的SpringBoot项目飞起来

本文详细介绍SpringBoot项目调优技巧,包括配置文件修改及JVM参数调整,以提升项目性能。涵盖应用实例与JVM参数解释,适合开发者实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

作者:星朝

来源:https://url.cn/5MrwT6L

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

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

修改配置文件

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

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

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.

Jvm调优

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

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

有兴趣大家可以去看看。

Jvm调优实战

1、未设置JVM参数的情况

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

下面我来启动看一下。

è¿éåå¾çæè¿°

看一下堆栈分配:

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

è¿éåå¾çæè¿°

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

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

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

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

往期推荐

Spring Cloud Alibaba Nacos 配置中心对比与实战

超级全面的MySQL优化--一篇足以【建议收藏】

Java/JDK 13 新特性详解

Spring Cloud Alibaba 微服务全家桶体验-2019阿里云峰会PPT

Spring Cloud Alibaba 完美融合Dubbo-Nacos示例

如何使用Seata保证Dubbo微服务间的一致性

B2B电商平台--ChinaPay银联电子支付功能

学会Zookeeper分布式锁,让面试官对你刮目相看

SpringCloud电商秒杀微服务-Redisson分布式锁方案

<think>嗯,用户问的是如何在IntelliJ IDEA中设置SpringBoot项目JVM运行内存参数,特别是-Xmx和-Xms。我需要仔细回想一下之前学过的相关知识,并结合提供的引用内容来给出正确的步骤。 首先,根据引用[1]和[2],设置JVM参数有两种方法:通过IDE的配置选项或者直接修改配置文件。用户可能更倾向于通过IDE的图形界面来操作,所以需要先说明通过运行配置的方式。比如,在Run/Debug Configurations里找到SpringBoot的应用配置,然后在VM options中添加-Xms和-Xmx参数,比如-Xms2048m -Xmx2048m。这样用户可以直接在项目运行时应用这些参数。 然后,引用[4]提到了修改idea64.exe.vmoptions文件来设置IDE本身的JVM参数,但这可能和应用程序的JVM参数混淆,需要明确区分。用户的问题是关于SpringBoot项目的,所以应该强调是在应用程序的配置中设置,而不是IDE的VM选项。避免用户误操作。 接下来,根据引用[3],Xms和Xmx设为相同值可以避免堆内存动态调整带来的性能损耗,这对于生产环境是有好处的。不过用户可能在开发环境中,是否推荐设置相同值呢?需要说明这样做的优缺点,让用户根据实际情况决定。 可能还需要检查用户提供的引用内容是否有其他需要注意的地方。例如,引用[1]中的示例用了-Xmn2g,但用户的问题主要关注-Xmx和-Xms,所以可能不需要涉及其他参数,除非用户提到。但如果有必要,可以简要说明其他参数的作用,但保持回答的针对性。 另外,用户可能对如何验证设置是否生效有疑问。可以建议他们通过打印Runtime信息或者在启动日志中查看最大内存值来确认参数是否正确应用。例如,在SpringBoot启动时输出Runtime.getRuntime().maxMemory()的值。 还要注意操作系统的不同,比如在Windows和Mac上配置文件的路径可能不同,需要分别说明。例如,Mac上的配置文件可能在~/Library/Application Support/JetBrains/IntelliJIdea2023.1/idea.vmoptions,而Windows可能在安装目录的bin文件夹下。不过用户的问题是关于项目运行的JVM参数,所以主要是修改运行配置,而不是IDE本身的VM参数。 总结步骤应该是:1. 通过运行配置设置VM选项;2. 修改项目配置的VM参数;3. 可选地,调整IDE自身的内存设置(如果需要);4. 验证配置是否生效。同时提醒用户区分应用程序和IDE的配置,避免混淆。 最后,生成相关问题时要围绕JVM参数设置,比如如何验证参数是否生效、设置相同值的好处、其他常用参数以及配置多个环境的方法。这些扩展问题能帮助用户进一步理解和应用相关知识。</think>### 分步解答 在 IntelliJ IDEA 中设置 SpringBoot 项目JVM 运行时内存参数(如 `-Xmx` 和 `-Xms`),可通过以下步骤实现: --- #### **方法一:通过运行配置直接设置** 1. **打开运行配置界面** - 在 IDEA 顶部菜单栏选择 `Run` → `Edit Configurations`; - 在左侧列表中找到你的 SpringBoot 应用配置(通常是 `Application` 类型)。 2. **添加 JVM 参数** - 在右侧的 `VM options` 输入框中填写参数,例如: ```plaintext -Xms2048m -Xmx4096m ``` - 参数说明: - `-Xms2048m`:初始堆内存为 2GB; - `-Xmx4096m`:最大堆内存为 4GB[^3]。 3. **保存并运行** - 点击 `Apply` → `OK`,重新启动应用即可生效。 --- #### **方法二:修改项目配置文件(推荐)** 1. **定位 `VM options` 文件** - 对于 SpringBoot 项目,通常直接在运行配置中设置即可。若需全局配置,可修改项目的 `pom.xml` 或 `build.gradle` 文件(例如通过 Maven 插件配置 JVM 参数)。 2. **示例(Maven 插件配置)** 在 `pom.xml` 的 `<build>` 标签内添加: ```xml <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <jvmArguments> -Xms2048m -Xmx4096m </jvmArguments> </configuration> </plugin> </plugins> ``` --- #### **方法三:调整 IDEA 自身内存配置(可选)** 若需要提升 IDE 的运行效率(非项目 JVM 参数),可修改 IDEA 的配置文件: 1. **找到 `idea64.exe.vmoptions`** - Windows:位于 IDEA 安装目录的 `bin` 文件夹下; - Mac/Linux:路径类似 `/Applications/IntelliJ IDEA.app/Contents/bin`[^4]。 2. **添加以下参数** ```plaintext -Xms2048m -Xmx4096m ``` 保存后重启 IDEA。 --- #### **验证参数是否生效** 1. 在 SpringBoot 启动类中添加代码: ```java public static void main(String[] args) { System.out.println("Max JVM Memory: " + Runtime.getRuntime().maxMemory() / 1024 / 1024 + "MB"); SpringApplication.run(Application.class, args); } ``` 2. 运行项目,控制台输出的内存值应与设置一致。 --- ### 注意事项 - **`-Xms` 与 `-Xmx` 设为相同值**:可避免堆内存动态扩展的性能损耗,适合生产环境; - **避免过度分配**:根据物理内存合理设置,通常不超过系统可用内存的 70%。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值