开发者社区> 问答> 正文

tomcat 下载大量文件,出现内存错误该如何解决?

TOMCAT6版本,900多M的文件能上传却不能下载
1
root cause
java.lang.OutOfMemoryError: Java heap space
服务器可用内存

         total       used       free     shared    buffers     cached

Mem: 3847 2854 992 11 22 434
-/+ buffers/cache: 2397 1449
Swap: 3904 540 3364

展开
收起
落地花开啦 2016-06-02 16:49:36 3099 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    你这个文件大到一定程度一样会OutOfMemoryError,直接把文件一次性放到你OutputStream就意味着你文件有多大就占用多大内存,如果再加上并发就更不行了。

    InputStream is = new FileInputStream(file);
                int read=0;
                byte[] bytes = new byte[2048];
                OutputStream os = response.getOutputStream();
                //分段遍历放入输出流中 减少内存占用
                while((read = is.read(bytes))!= -1){
                    os.write(bytes, 0, read);
                }
                response.setContentLength(bytes == null ? 0 : bytes.length);
                response.setContentType(new MimetypesFileTypeMap().getContentType(file));
                response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
                 
                os.flush();
                os.close();
    2019-07-17 19:25:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Tomcat 的云原生演进 立即下载
内存取证与IaaS云平台恶意行 为的安全监控 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载