在我的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的文件。
答案 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,将它们更改为所需的值。