Tomcat java.lang.OutOfMemoryError:Java堆空间

时间:2016-10-29 13:46:23

标签: spring tomcat spring-boot upload heap-size

在我的Spring Boot应用程序中,我想将文件上传到MySql数据库。当我想上传大文件时,我得到java.lang.OutOfMemoryError: Java heap space例外。我得到的文件大约超过60Mb似乎正常,因为我知道64Mb是默认的堆大小。

我已经运行了Tomcat8w.exe,并且在Java选项卡上我已经将以下行添加到Java选项中:

-Xms512m

-Xmx8192m

-XX:PermSize=512m

-XX:MaxPermSize=1024m

另外,我已经在bin文件夹中创建了一个setenv.bat文件,其中包含以下内容:

JAVA_OPTS="-Xms1024m -Xmx2048m"

这些都不适合我。在catalina-log中,当我启动Tomcat时,我会看到这些行:

29-Oct-2016 15:39:42.481 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms512m
29-Oct-2016 15:39:42.481 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx8192m
29-Oct-2016 15:39:42.482 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:PermSize=512m
29-Oct-2016 15:39:42.482 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MaxPermSize=1024m
29-Oct-2016 15:39:42.482 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: exit
29-Oct-2016 15:39:42.482 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms256m
29-Oct-2016 15:39:42.483 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx512m

我必须补充一点,我不知道最后两行来自哪里,这些不是我指定的值。

请帮助我,我做错了什么。我需要上传最高100Mb的文件。

1 个答案:

答案 0 :(得分:0)

如果使用Windows服务,则应在注册表中更改Windows服务的设置。还可以指定其他启动参数,如果要作为Windows服务启动Tomcat,则在某些文件中(至少部分)将忽略Shell脚本设置。

转到并使用键名导航到要求(对于其他窗口,则为类似的名称,对于本例,则为Windows Server 2012 R2 64位):

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Apache Software Foundation \ Procrun 2.0 \ {tomcat-service-name} \ Parameters \ Java

(将{tomcat-service-name}替换为您的特定值),您应该看到诸如JvmMx,JvmMs,Classpath,Options之类的参数,可用于调整启动的jvm。我想,将值256和512指定为JvmMs和JvmMx,将它们更改为所需的值。