SpringMVC上传大视频文件,报错NullPointerException,追踪报错:java.lang.OutOfMemoryError

项目中有文件上传功能,测试上传40M的文件没有问题,上传大文件(40M以上)上传出现空指针异常,追踪代码后发现是上传文件,数据流读取文件时java.lang.OutOfMemoryError,内存溢出。

1、首先,SpringMVC在上传文件的时候肯定要配置SpringMVC的配置文件中配置,上传文件大小限制的参数
在这里插入图片描述
在这里插入图片描述

	<bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
         <!-- maxUploadSize 允许上传的最大文件 200M(200*1024*1024)b为单位 -->
         <property name="maxUploadSize" value="209715200"/>
          <!-- maxInMemorySize允许的最大内存大小 -->
         <property name="maxInMemorySize" value="4096"/>
           <!-- defaultEncoding上传文件编码 -->
         <property name="defaultEncoding" value="UTF-8"/>
          <!-- 设置是否在时惰性地解析多部分,用来抛异常用的,可有可无 -->
         <property name="resolveLazily" value="true"/>
     </bean>

2、其次,配置tomcat的上传文件大小
apache-tomcat_8082\apache-tomcat-8.0.53\conf\server.xml文件
maxPostSize="-1"//-1表示不限制上传文件大小

  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="50000"
               redirectPort="8443" 
			   maxPostSize="-1"
			   />

3、报错:java.lang.OutOfMemoryError
内存溢出,在上传大文件时,报错
如图:
在这里插入图片描述
原因是JVM虚拟机内存不够用,上传文件把内存沾满了。
具体原因请看下面博客,这位老哥写的很好,不过没有解决我的问题
https://blog.csdn.net/dongbang111/article/details/43919731
还有这个老哥,和我的问题一样,但是并没有解决我的问题,但是定位很好
https://blog.csdn.net/magiccity/article/details/83008285

我的方案是;增加tomcat的JVM内存
修改apache-tomcat_8082\apache-tomcat-8.0.53\bin里的catalina.bat内容
内存拉高到1024M

注意:tomcat8.0.5里面的默认是:

set "JAVA_OPTS=%JAVA_OPTS% -server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=256m"

修改为

set "JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -XX:PermSize=512M -XX:MaxNewSize=512m -XX:MaxPermSize=512m"

在这里插入图片描述
不会设置的参考这位老哥:
https://www.cnblogs.com/zhangchengzi/p/9759890.html

然后上传文件就不会溢出了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值