Java堆空间(带有大文件的CMS)

2 java memory tomcat

编辑:

得到了目录.现在还有另一个问题:

存储中的文件以其DB id作为其文件名的前缀进行存储.当然我不希望用户看到这些.

有没有办法将response.redirect和标题设置结合起来,文件名和大小?

最好,

     A
Run Code Online (Sandbox Code Playgroud)

你好,我们又见面了,

新的方法:

是否可以在tomcat中创建一个类似虚拟目录的IIS,以避免流式传输并且只使用头重定向?我在环境中玩耍但却无法实现......

有任何想法吗?

    thx
Run Code Online (Sandbox Code Playgroud)

一个

嗨%,

我正面临着java堆空间的连线问题,这个问题已经接近我的绳索.

简短版本是:

我写了一个ContentManagementSystem,它也需要处理大文件(> 600mb).Tomcat堆设置:

-Xmx700m -Xms400m

问题是,上传巨大的文件虽然很慢,但仍可正常工作.下载文件会导致java堆空间异常.

尝试下载370mb文件会使tomcat跳转到500mb堆(应该没问题)并以Java堆空间异常结束.

我不明白,为什么上传工作和下载不?这是我的下载代码:

byte[] byt = new byte[1024*1024*2];

response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\""); 

FileInputStream fis = null;
OutputStream os = null;

fis = new FileInputStream(new File(filePath));
os = response.getOutputStream();

BufferedInputStream buffRead = new BufferedInputStream(fis);

while((read = buffRead.read(byt))>0)            
{
    os.write(byt,0,read);
    os.flush();
}

buffRead.close();
os.close();
Run Code Online (Sandbox Code Playgroud)

如果我说得对,缓冲的读者应该处理任何内存问题,对吧?

任何帮助都会受到高度赞赏,因为我没有想法

最好的祝福,

w ^

Mic*_*rdt 5

如果我说得对,缓冲的读者应该处理任何内存问题,对吧?

不,这与内存问题无关,它实际上是不必要的,因为您已经在使用缓冲区来读取文件.你的问题在于写作,而不是阅读.

我看不出你的代码有什么问题.看起来Tomcat正在缓冲整个响应而不是流式传输.我不确定是什么原因引起的.

什么response.getBufferSize()回报?你应该尝试设置response.setContentLength()文件的大小; 我依稀记得在某些情况下,一个Web容器会缓冲整个响应以确定内容长度,所以也许这就是正在发生的事情.无论如何,这是一个很好的做法,因为它使客户能够显示下载大小并为下载提供ETA.