在我的 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 的文件。
最佳答案
如果您使用windows服务,您应该在注册表中更改windows服务的设置。还可以指定其他启动参数,如果您要将 Tomcat 作为 Windows 服务启动,则在某些文件中(至少部分)忽略 shell 脚本设置。
使用 key 名称(或其他窗口的类似名称,而不是我的 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,将它们更改为您想要的值。
关于spring - Tomcat java.lang.OutOfMemoryError : Java heap space 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40319709/