On 13.05.2009 08:07, Peter Crowther wrote:
>> From: André Warnier [...@ice-sa.com] would it not be easier to catch
>> the OOM exception and then return a "sorry, server overloaded" page
>> to the browser ?
> 
> At that point, it's too late.  A thread, somewhere in the system,
> tried to allocate some memory for an object and couldn't.  This could
> happen anywhere!  It might be while allocating the buffer to read the
> request, or the buffer to send the response, or even the socket
> instance from which to read the request.
> 
> There are then no guarantees.  You may be unable to send anything
> back to the client, as you may be unable to access the socket because
> the OOM was caused by trying to create that socket.  Or the thread
> that got the exception might be one of the threads processing
> incoming requests.  Once the system encounters an out-of-memory
> error, you pretty much have to stop the process and start again, as
> you generally have no idea what else has failed.  You can't even save
> any outstanding work to file, as there's no guarantee you can
> allocate the memory for the file object - if MS Word runs out of
> memory, you just lost your document!
> 
> This isn't unique to Java, by the way - if you want a coding
> nightmare, try to handle *all* malloc() fails in a reasonably sized C
> program.  Or kalloc() calls in a kernel :-).  When you realise that
> running out of memory means you can no longer guarantee to allocate
> any new memory for any purpose at all, the scale of the problem
> becomes apparent.

+1!

Another example for "no more guarantees": after an OOME in heap, your
business logic might be broken in a very unexpected way! Don't let any
Java process do more work once it had an OOME in heap.

Regards,

Rainer

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to