1

在我的 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 的文件。

4

1 回答 1

1

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

使用键名(或其他窗口的类似名称,而不是我的 Windows Server 2012 R2 64 位)导航到 reqistry:

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,将它们更改为您想要的值。

于 2019-05-06T11:31:19.110 回答