IDEA启动Springboot项目失败——运行内存不足

目录

问题现象:

问题分析:

解决方法:

1、关闭占用内存的不必要进程后,等待一段时间,再重新启动项目成功:

2、设置jvm的堆内存大小:

堆大小典型设置举例:

3、优化代码性能,及时gc

拓展:java自带分析工具:

jstack(查看线程堆栈信息):

jmap(查看内存):

jstat(jvm统计信息监控工具)命令:

拓展:JVM常用设置参数

堆常用设置:

收集器设置:

垃圾回收统计信息:

并行收集器设置:

并发收集器设置:


问题现象:

今天在使用IDEA运行Springboot项目的时候,启动失败并报错,如下:

        Error occurred during initialization of VM
        Could not reserve enough space for object heap

IDEA启动Springboot项目失败——运行内存不足_第1张图片

Error:Abnormal build process termination: 
D:\Java\jdk1.8.0_211\bin\java.exe -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs=\"\" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=E:/server-saveserver "-Dpreload.config.path=D:/IntelliJ IDEA 2018.2.5/.IntelliJIdea/config/options" -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=-8248413857144379764 -Dfile.encoding=GBK -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2018.2 "-Didea.home.path=D:\IntelliJ IDEA 2018.2.5" "-Didea.config.path=D:/IntelliJ IDEA 2018.2.5/.IntelliJIdea/config" "-Didea.plugins.path=D:/IntelliJ IDEA 2018.2.5/.IntelliJIdea/config\plugins" "-Djps.log.dir=D:/IntelliJ IDEA 2018.2.5/.IntelliJIdea/system/log/build-log" "-Djps.fallback.jdk.home=D:/IntelliJ IDEA 2018.2.5/jre64" -Djps.fallback.jdk.version=1.8.0_152-release -Dio.netty.noUnsafe=true "-Djava.io.tmpdir=D:/IntelliJ IDEA 2018.2.5/.IntelliJIdea/system/compile-server/server-saveserver_b9d2474c/_temp_" -Djps.backward.ref.index.builder=true -Dkotlin.incremental.compilation=true -Dkotlin.daemon.enabled -Dkotlin.daemon.client.alive.path=\"C:\Users\Think\AppData\Local\Temp\kotlin-idea-1345231103134145255-is-running\" -classpath "D:/IntelliJ IDEA 2018.2.5/lib/jps-launcher.jar;D:/Java/jdk1.8.0_211/lib/tools.jar;D:/IntelliJ IDEA 2018.2.5/lib/optimizedFileManager.jar" org.jetbrains.jps.cmdline.Launcher "D:/IntelliJ IDEA 2018.2.5/lib/jps-model.jar;D:/IntelliJ IDEA 2018.2.5/lib/netty-buffer-4.1.25.Final.jar;D:/IntelliJ IDEA 2018.2.5/lib/jdom.jar;D:/IntelliJ IDEA 2018.2.5/lib/guava-23.6-jre.jar;D:/IntelliJ IDEA 2018.2.5/lib/httpcore-4.4.9.jar;D:/IntelliJ IDEA 2018.2.5/lib/maven-builder-support-3.3.9.jar;D:/IntelliJ IDEA 2018.2.5/lib/httpclient-4.5.5.jar;D:/IntelliJ IDEA 2018.2.5/lib/maven-repository-metadata-3.3.9.jar;D:/IntelliJ IDEA 2018.2.5/lib/jps-builders-6.jar;D:/IntelliJ IDEA 2018.2.5/lib/trove4j.jar;D:/IntelliJ IDEA 2018.2.5/lib/commons-codec-1.10.jar;D:/IntelliJ IDEA 2018.2.5/lib/aether-dependency-resolver.jar;D:/IntelliJ IDEA 2018.2.5/lib/oro-2.0.8.jar;D:/IntelliJ IDEA 2018.2.5/lib/nanoxml-2.2.3.jar;D:/IntelliJ IDEA 2018.2.5/lib/maven-model-builder-3.3.9.jar;D:/IntelliJ IDEA 2018.2.5/lib/resources_en.jar;D:/IntelliJ IDEA 2018.2.5/lib/aether-util-1.1.0.jar;D:/IntelliJ IDEA 2018.2.5/lib/forms_rt.jar;D:/IntelliJ IDEA 2018.2.5/lib/aether-impl-1.1.0.jar;D:/IntelliJ IDEA 2018.2.5/lib/maven-aether-provider-3.3.9.jar;D:/IntelliJ IDEA 2018.2.5/lib/maven-model-3.3.9.jar;D:/IntelliJ IDEA 2018.2.5/lib/aether-spi-1.1.0.jar;D:/IntelliJ IDEA 2018.2.5/lib/jna-platform.jar;D:/IntelliJ IDEA 2018.2.5/lib/aether-transport-file-1.1.0.jar;D:/IntelliJ IDEA 2018.2.5/lib/idea_rt.jar;D:/IntelliJ IDEA 2018.2.5/lib/lz4-1.3.0.jar;D:/IntelliJ IDEA 2018.2.5/lib/plexus-component-annotations-1.6.jar;D:/IntelliJ IDEA 2018.2.5/lib/jna.jar;D:/IntelliJ IDEA 2018.2.5/lib/protobuf-java-3.4.0.jar;D:/IntelliJ IDEA 2018.2.5/lib/log4j.jar;D:/IntelliJ IDEA 2018.2.5/lib/asm-all.jar;D:/IntelliJ IDEA 2018.2.5/lib/netty-transport-4.1.25.Final.jar;D:/IntelliJ IDEA 2018.2.5/lib/javac2.jar;D:/IntelliJ IDEA 2018.2.5/lib/platform-api.jar;D:/IntelliJ IDEA 2018.2.5/lib/commons-lang3-3.4.jar;D:/IntelliJ IDEA 2018.2.5/lib/netty-common-4.1.25.Final.jar;D:/IntelliJ IDEA 2018.2.5/lib/forms-1.1-preview.jar;D:/IntelliJ IDEA 2018.2.5/lib/jps-builders.jar;D:/IntelliJ IDEA 2018.2.5/lib/aether-connector-basic-1.1.0.jar;D:/IntelliJ IDEA 2018.2.5/lib/commons-logging-1.2.jar;D:/IntelliJ IDEA 2018.2.5/lib/netty-resolver-4.1.25.Final.jar;D:/IntelliJ IDEA 2018.2.5/lib/slf4j-api-1.7.25.jar;D:/IntelliJ IDEA 2018.2.5/lib/util.jar;D:/IntelliJ IDEA 2018.2.5/lib/plexus-interpolation-1.21.jar;D:/IntelliJ IDEA 2018.2.5/lib/annotations.jar;D:/IntelliJ IDEA 2018.2.5/lib/aether-api-1.1.0.jar;D:/IntelliJ IDEA 2018.2.5/lib/netty-codec-4.1.25.Final.jar;D:/IntelliJ IDEA 2018.2.5/lib/maven-artifact-3.3.9.jar;D:/IntelliJ IDEA 2018.2.5/lib/plexus-utils-3.0.22.jar;D:/IntelliJ IDEA 2018.2.5/lib/aether-transport-http-1.1.0.jar;;D:/IntelliJ IDEA 2018.2.5/lib/gson-2.8.4.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/jarutils.jar;D:/IntelliJ IDEA 2018.2.5/lib/guava-23.6-jre.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/common-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/manifest-merger-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/sdk-common-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/builder-model-3.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/builder-test-api-3.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/ddmlib-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/repository-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/gradle/lib/gradle-api-4.8.jar;D:/IntelliJ IDEA 2018.2.5/lib/gson-2.8.4.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/jarutils.jar;D:/IntelliJ IDEA 2018.2.5/lib/guava-23.6-jre.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/common-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/manifest-merger-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/sdk-common-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/builder-model-3.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/builder-test-api-3.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/ddmlib-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/repository-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/gradle/lib/gradle-api-4.8.jar;D:/IntelliJ IDEA 2018.2.5/plugins/ant/lib/ant-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/uiDesigner/lib/jps/ui-designer-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/IntelliLang/lib/intellilang-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/Groovy/lib/groovy-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/Groovy/lib/groovy-rt-constants.jar;D:/IntelliJ IDEA 2018.2.5/plugins/eclipse/lib/eclipse-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/eclipse/lib/common-eclipse-util.jar;D:/IntelliJ IDEA 2018.2.5/plugins/maven/lib/maven-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/maven/lib/plexus-utils-2.0.6.jar;D:/IntelliJ IDEA 2018.2.5/plugins/osmorc/lib/osmorc-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/osmorc/lib/biz.aQute.bndlib-4.0.0.jar;D:/IntelliJ IDEA 2018.2.5/plugins/osmorc/lib/biz.aQute.repository-4.0.0.jar;D:/IntelliJ IDEA 2018.2.5/plugins/osmorc/lib/biz.aQute.resolve-4.0.0.jar;D:/IntelliJ IDEA 2018.2.5/plugins/osmorc/lib/plexus-utils-3.0.10.jar;D:/IntelliJ IDEA 2018.2.5/plugins/osmorc/lib/bundlor-all.jar;D:/IntelliJ IDEA 2018.2.5/plugins/aspectj/lib/aspectj-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/flex/lib/flex-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/flex/lib/flex-shared.jar;D:/IntelliJ IDEA 2018.2.5/plugins/gradle/lib/gradle-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/devkit/lib/devkit-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/JavaEE/lib/javaee-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/JavaEE/lib/jps/jpa-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/webSphereIntegration/lib/jps/webSphere-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/weblogicIntegration/lib/jps/weblogic-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/dmServer/lib/dmServer-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/GwtStudio/lib/gwt-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/GoogleAppEngine/lib/google-app-engine-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/GoogleAppEngine/lib/appEngine-runtime.jar;D:/IntelliJ IDEA 2018.2.5/plugins/Grails/lib/grails-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/Grails/lib/grails-compiler-patch.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/jps/android-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/android-common.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/build-common.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/android-rt.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/sdklib.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/common-26.1.2.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/jarutils.jar;D:/IntelliJ IDEA 2018.2.5/plugins/android/lib/layoutlib-api.jar;D:/IntelliJ IDEA 2018.2.5/plugins/Kotlin/lib/jps/kotlin-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/Kotlin/lib/kotlin-stdlib.jar;D:/IntelliJ IDEA 2018.2.5/plugins/Kotlin/lib/kotlin-reflect.jar;D:/IntelliJ IDEA 2018.2.5/plugins/Kotlin/lib/kotlin-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/Kotlin/lib/android-extensions-ide.jar;D:/IntelliJ IDEA 2018.2.5/plugins/Kotlin/lib/android-extensions-compiler.jar;D:/IntelliJ IDEA 2018.2.5/plugins/javaFX/lib/javaFX-jps-plugin.jar;D:/IntelliJ IDEA 2018.2.5/plugins/javaFX/lib/common-javaFX-plugin.jar" org.jetbrains.jps.cmdline.BuildMain 127.0.0.1 54117 0e3e7f85-632f-4a7a-a938-402da2b4d659 "D:/IntelliJ IDEA 2018.2.5/.IntelliJIdea/system/compile-server"
Error occurred during initialization of VM
Could not reserve enough space for object heap


问题分析:

报错信息:

        Error occurred during initialization of VM

        Could not reserve enough space for object heap

从报错信息可知:

是电脑的运行内存不足,导致项目无法启动;

所以只需要释放内存,并等待一段时间,因为电脑响应式需要时间的;
下面提供2种方法,选择其中一种即可:

1. 将电脑上不必要的进程关闭,等待一段时间,然后再启动项目!!!
2. 重启电脑,启动IDEA,打开项目,启动项目!!!

 

通过任务管理器可以查看cpu占用率
IDEA启动Springboot项目失败——运行内存不足_第2张图片

        当然,以上方法适用于cpu内存占用很高的情况。

        其他的方法,还有:

        设置jvm堆内存大小、优化代码性能等。


解决方法:

1、关闭占用内存的不必要进程后,等待一段时间,再重新启动项目成功:

IDEA启动Springboot项目失败——运行内存不足_第3张图片

2、设置jvm的堆内存大小:

        1、JVM初始分配的内存,由-Xms指定,默认是物理内存的1/64

        2、JVM最大分配的内存,由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆,直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆,直到-Xms的最小限制。因此服务器一般设置-Xms与-Xmx相等,以避免在每次GC 后调整堆的大小。

        【需要注意的是,不建议随意设置jvm虚拟机的堆内存大小】

        建议使用java自带分析工具,非常有助于推算大概的堆内存大小。

堆大小典型设置举例:

JVM 中最大堆大小有三方面限制:

        相关操作系统的数据模型(32-bt还是64-bit)限制;

        系统的可用虚拟内存限制;

        系统的可用物理内存限制。

        在32位系统下,一般限制在1.5G~2G,64为操作系统对内存无特定限制。

如:

机器配置:128G内存 32核CPU

典型设置: java -Xmx72g -Xms72 -Xmn4g -Xss256m

        -Xmx72g:设置JVM最大可用内存为72g。

        -Xms72g:设置JVM最小内存为72g。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

        -Xmn4g:设置年轻代大小为4G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。(注:这里默认的使用的JVM是Sun的Hotspot,而其中使用GC算法就是分代算法。若要了解详情,可以参考一些关于JVM的书: 《深入理解Java虚拟机》第二版 )

        -Xss256m:设置每个线程的堆栈大小。JDK5.0以后,每个线程堆栈大小为1M,以前每个线程堆栈大小为128k。更新应用的线程,所需内存大小进行调整。在相同物理内存下,减小这个值,能生成更多的线程。但是操作系统,对一个进程内的线程数,还是有限制的,不能无限生成,经验值在3000~5000左右。

最终配置:

java -Xmx72g -Xms72g -Xss256m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=0

解释:

        -XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5。

        -XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6。

        -XX:MaxPermSize=256m:设置持久代大小为256m。

        -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。 对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代即被回收的概率。

3、优化代码性能,及时gc

        虽然真正的gc运行是不可控的,但通过优化代码,在一定程度上也是可以有效地降低内存占用的。例如:对一些不再使用的强引用对象,例如list、map集合等对象,不再使用时,可以清空集合,提高gc效率,对于数据库查询数据量有较稳定记录数的,也可以考虑在使用集合接收数据时,设置一个初始值,减少集合扩容次数等,代码优化是一个大学问!

        优化代码性能,才是程序员大佬们一直追求的王道!


拓展:java自带分析工具

jstack(查看线程堆栈信息):

        jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

jmap(查看内存):

        jmap命令用于生产堆转存快照。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

jstat(jvm统计信息监控工具)命令:

        jstat 是用于虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、jit编译等运行数据,它是线上定位jvm性能的首选工具。


拓展:JVM常用设置参数

堆常用设置:

-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:设置年轻代大小
-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5
-XX:MaxPermSize=n:设置持久代大小

收集器设置:

-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器

垃圾回收统计信息:

-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename

并行收集器设置:

-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

并发收集器设置:

-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。

你可能感兴趣的:(IDEA,Springboot,启动项目失败运行内存不足)