问题描述
在 Cursor IDE 中运行 Spring Boot 项目时,可能出现以下问题:
- 应用启动失败,报
OutOfMemoryError - Bean 创建失败,提示依赖注入异常
- 启动过程中卡顿或崩溃
- 日志显示内存相关错误
问题原因
- 默认 JVM 内存设置过小
在 Cursor IDE 中运行 Spring Boot 项目时遇到的内存不足(OutOfMemoryError)问题及其解决方案。主要原因包括默认 JVM 内存设置过小、多模块资源占用高及 DevTools 占用等。提供了五种解决途径:通过 launch.json 配置 JVM 参数、settings.json 全局设置、Maven 命令行运行、pom.xml 插件配置及创建运行脚本。建议根据项目规模调整堆内存和元空间大小,启用 G1 垃圾收集器并禁用 DevTools 自动重启以减少内存占用。最后提供了验证方法和常见问题解答,帮助开发者优化启动性能。
在 Cursor IDE 中运行 Spring Boot 项目时,可能出现以下问题:
OutOfMemoryError在项目根目录的 .vscode/launch.json 中为运行配置添加 JVM 内存参数。
在项目根目录创建 .vscode 文件夹(如果不存在),然后创建 launch.json 文件。
{"version":"0.2.0","configurations":[{"type":"java","name":"Current File","request":"launch","mainClass":"${file}"},{"type":"java","name":"Spring Boot Application","request":"launch","mainClass":"com.example.demo.Application","projectName":"your-project-name","vmArgs":"-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -Dspring.devtools.restart.enabled=false","console":"internalConsole","internalConsoleOptions":"openOnSessionStart"},{"type":"java","name":"Spring Boot Application (Large)","request":"launch","mainClass":"com.example.demo.Application","projectName":"your-project-name","vmArgs":"-Xms2048m -Xmx4096m -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Dspring.devtools.restart.enabled=false","console":"internalConsole","internalConsoleOptions":"openOnSessionStart"}]
| 参数 | 说明 | 推荐值 |
|---|---|---|
-Xms | 初始堆内存 | 1024m(小项目)或 2048m(大项目) |
-Xmx | 最大堆内存 | 2048m(小项目)或 4096m(大项目) |
-XX:MetaspaceSize | 元空间初始大小 | 512m 或 1024m |
-XX:MaxMetaspaceSize | 元空间最大大小 | 1024m 或 2048m |
-XX:+UseG1GC | 使用 G1 垃圾收集器 | 推荐启用 |
-XX:MaxGCPauseMillis | 最大 GC 暂停时间(毫秒) | 200 |
-Dspring.devtools.restart.enabled=false | 禁用 DevTools 自动重启 | 减少内存占用 |
F5 或点击运行按钮在 .vscode/settings.json 中配置:
{"java.jdt.ls.vmargs":"-Xmx2048m -XX:+UseG1GC","java.debug.settings.vmArgs":"-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m","java.compile.nullAnalysis.mode":"automatic"}
macOS/Linux:
export MAVEN_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m"
mvn spring-boot:run
Windows PowerShell:
$env:MAVEN_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m"
mvn spring-boot:run
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m"
在 pom.xml 的 spring-boot-maven-plugin 中添加:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments> -Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC </jvmArguments>
</configuration>
</plugin>
#!/bin/bash
export MAVEN_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC"
mvn spring-boot:run
赋予执行权限:
chmod +x run.sh
./run.sh
@echo off
set MAVEN_OPTS=-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC
mvn spring-boot:run
以下是一个多模块 Spring Boot 项目的完整配置示例:
{"version":"0.2.0","configurations":[{"type":"java","name":"Current File","request":"launch","mainClass":"${file}"},{"type":"java","name":"API Module","request":"launch","mainClass":"com.example.api.ApiApplication","projectName":"api-module","vmArgs":"-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -Dspring.devtools.restart.enabled=false","console":"internalConsole","internalConsoleOptions":"openOnSessionStart"},{"type":"java","name":"Web Module","request":"launch","mainClass":"com.example.web.WebApplication","projectName":"web-module","vmArgs":"-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC -Dspring.devtools.restart.enabled=false","console":"internalConsole","internalConsoleOptions":"openOnSessionStart"},{"type":"java","name":"Job Module","request":"launch","mainClass":"com.example.job.JobApplication","projectName":"job-module","vmArgs":"-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC","console":"internalConsole","internalConsoleOptions":"openOnSessionStart"},{"type":"java","name":"Consumer Module","request":"launch","mainClass":"com.example.consumer.ConsumerApplication","projectName":"consumer-module","vmArgs":"-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC","console":"internalConsole","internalConsoleOptions":"openOnSessionStart"}]
-Xms512m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
-Xms1024m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m -XX:+UseG1GC
-Xms2048m -Xmx4096m -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=200
运行应用后,在终端执行:
jps -v
查看实际使用的 JVM 参数。
在应用运行时,可以通过以下方式监控:
jconsole 或 jvisualvm/actuator/metrics 端点确认没有以下错误:
OutOfMemoryErrorjava.lang.OutOfMemoryError: Metaspacejava.lang.OutOfMemoryError: Java heap spaceA: 可以通过以下方式:
jconsole 监控实际内存使用A: 可能的原因:
A: G1GC 适合大堆内存场景,GC 暂停时间更可控,推荐在 2GB 以上堆内存时使用。
A: 可以在 launch.json 中创建多个配置,例如:
通过合理配置 JVM 内存参数,可以有效解决 Cursor IDE 中 Spring Boot 项目启动时的内存不足问题。推荐使用 launch.json 方式,既方便又灵活。根据项目规模选择合适的内存配置,可以确保应用稳定运行。
注意事项:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online