http 超大文件上传出现 java.lang.OutOfMemoryError: Java heap space

zhf_andy 2011-01-11 09:30:14
上传超大文件时出现的,不知道怎么解决,如果con.setChunkedStreamingMode(1024);
但是很多服务器不支持这种上传方式,我的服务器是tomcat,文件上传组件是struts的文件上传,大家帮我看看这个问题到底怎么解决或者给个方案也行,但我不想修改服务器的代码
...全文
1313 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xl_anne 2013-07-17
  • 打赏
  • 举报
回复
java.lang.OutOfMemoryError: Java heap space org.apache.commons.io.output.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:237) org.apache.commons.io.output.DeferredFileOutputStream.getData(DeferredFileOutputStream.java:158) org.apache.commons.fileupload.disk.DiskFileItem.get(DiskFileItem.java:324) org.apache.commons.fileupload.disk.DiskFileItem.write(DiskFileItem.java:417) com.bcc.fts.server.HttpRequesterServer.processFileUpload(HttpRequesterServer.java:99) com.bcc.fts.server.HttpRequesterServer.doPost(HttpRequesterServer.java:55) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.36 logs. 我的出现的问题如上所示,但是文件最后却能上传成功。 具体是什么 原因 呢? 希望大家能给出解决方法 先谢谢了
qq346946073 2012-09-26
  • 打赏
  • 举报
回复
我认为解决这大文件的方式绝对是以流的方式,可是提交时怎么传呢?
healer_kx 2012-09-26
  • 打赏
  • 举报
回复
改个毛配置啊。这种问题不要用Java解决了。

用jni,其他语言写个上传的不就得了。
0xfather 2012-07-02
  • 打赏
  • 举报
回复
这是JVM一直以来的BUG,如上面所说,扩大JVM的内存空间可以解决问题
sffx123 2012-07-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

谢谢大家,对于这个问题我已经有解决方案了,等过几天有空,我会把两种解决方案贴出来给大伙分享~~~
[/Quote]好同志
zhonghuafy 2012-07-02
  • 打赏
  • 举报
回复
楼主,我现在也遇到这个问题了,请教下你是怎么解决的啊?zhonghuafy@126.com
alpha_423 2011-01-14
  • 打赏
  • 举报
回复
修改虚拟机的内存不是根绝的办法,而且据我测试 tomcat内存调到超过1.3G就没用了。
mark 期待楼主的解决方案
liuchao1989 2011-01-12
  • 打赏
  • 举报
回复
好的,期待中。
zhf_andy 2011-01-12
  • 打赏
  • 举报
回复
谢谢大家,对于这个问题我已经有解决方案了,等过几天有空,我会把两种解决方案贴出来给大伙分享~~~
zhf_andy 2011-01-12
  • 打赏
  • 举报
回复
不是服务器的原因吧,我用浏览器去上传就不会出现这样的问题,你说的对jspSmartUpload不支持大文件的上传。我用的是struts集成的文件上传组件和tomcat服务器
[Quote=引用 5 楼 ddyouyue 的回复:]
首先你要确定是不是你的上传组件造成的这个原因
以前看到一个叫做jspSmartUpload的上传文件的控件,他的实现方式是将上传的文件以字节数组方式放入内存然后在回写到本地硬盘,当上传大文件时就会出错。当时我就傻乎乎的自己写了个上传组件,还用1个多G电影做测试。后来才发现原来上传组件是如此最多,apache写的也非常不错
[/Quote]
zhf_andy 2011-01-12
  • 打赏
  • 举报
回复
把虚拟机的内存大点这个重量型的解决方案不是很好吧
zh_666 2011-01-11
  • 打赏
  • 举报
回复
jdk中-Xms1024m -Xmx1024m -XX:MaxPermSize=128M,
eclipse中-XX:PermSize=512M
-XX:MaxPermSize=512m
eclipse中的这个试情况而定。
最后可能是你的程序有问题
tt986101dpc 2011-01-11
  • 打赏
  • 举报
回复
增加一下jvm内存就Ok。。

还有在选择数据类型的时候。。最好用blob(大二进制类型字段 用于将一些没有严格定义的大文件以二进制流的形势存储在数据库中
通常 使用最多的是存储 jpg文件 和一些大文本)这种字段来储存数据
xiaochun91103 2011-01-11
  • 打赏
  • 举报
回复
可以适当增加JVM的内存
set CATALINA_OPTS=-Xms128M -Xmx256M

还有可能就是程序写的不严密。修改一下程序吧。
逍遥庄主 2011-01-11
  • 打赏
  • 举报
回复
这个是内存溢出吧?我在用eclipse时遇到过 一般是改下 eclipse.ini里的-Xms512m
-Xmx512m改大一些
ddyouyue 2011-01-11
  • 打赏
  • 举报
回复
首先你要确定是不是你的上传组件造成的这个原因
以前看到一个叫做jspSmartUpload的上传文件的控件,他的实现方式是将上传的文件以字节数组方式放入内存然后在回写到本地硬盘,当上传大文件时就会出错。当时我就傻乎乎的自己写了个上传组件,还用1个多G电影做测试。后来才发现原来上传组件是如此最多,apache写的也非常不错

62,632

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧