spring - Tomcat java.lang.OutOfMemoryError : Java heap space 错误

标签 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 的文件。

最佳答案

如果您使用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/

相关文章:

eclipse - 为什么 GWT Web 应用程序在端口 8888 而不是 8080 中打开

java - OrderedRequestContextFilter 上的 Spring Boot 应用程序意外登录

java - Spring MVC 监控/观察每个请求

java - AJAX 调用未到达 Spring MVC Controller

java - 我如何让我的 Spring-JUnit 测试认为它在 GenericApplicationContext 中运行?

java - Spring Boot 应用程序的 POM

java - Spring 启动: How to get running port of application deployed on JBoss (or any app server)?

json - AWS ElasticBeanstalk 上的 Tomcat 不接受 JSON

web-services - 从受 SSL 保护的 WSDL 打开流时出现 ArrayIndexOutOfBoundsException

SVN 通过 Tomcat 和 WebDAV