I think you should write from the buffer stream and not from a direct stream.

--Omar

On Jun 18, 2009, at 9:04 AM, Richard Yee <richard.k....@gmail.com> wrote:

Take a look at the HttpServletResponse.setBufferSize() and
flushBuffer() methods. Perhaps you should call flushBuffer instead of
os.flush()?

-R

On Wed, Jun 17, 2009 at 12:23 PM, Wolfgang
Grabow<wolfgang_gra...@gmx.net> wrote:
Hi Mike,


thx for the hints. I updated and tracked down the memory issue.
It's actually that java's buffering the whole file before beginning
the streaming to the user.

Any ideas on how to prevent that?


       tia


               W

Mike Quentel (4DM) schrieb:
Try upgrading to the latest JVM. Analyse threads in JConsole. Might there need to be some blocks of code set to synchronised?

Perhaps you have already done the above; but these are good ways to rule out the sources of leaks, as well as to diagnose the issues.


------Original Message------
From: kaphb...@gmx.net
To: users@myfaces.apache.org
ReplyTo: MyFaces Discussion
Subject: Java Heap Space
Sent: 16 Jun 2009 04:36

Hi %,


I'm facing a wired issue with the java heap space which is close
to bringing me to the ropes.

The short version is:

I've written a ContentManagementSystem which needs to handle
huge files (>600mb) too. Tomcat heap settings:

-Xmx700m
-Xms400m

The issue is, that uploading huge files works eventhough it's
slow. Downloading files results in a java heap space exception.

Trying to download a 370mb file makes tomcat jump to 500mb heap
(which should be ok) and end in an Java heap space exception.

I don't get it, why does upload work and download not?
Here's my download code:

      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();


If I'm getting it right the buffered reader should take care of any
memory issue, right?

Is there a chance that JSF interferes my tomcat settings?
Any help would be highly appreciated since I ran out of ideas.

              Best regards,

                 W


Reply via email to