Le Sep 27, 2012 à 7:41 PM, Benjamin Rutt <rut...@osu.edu> a écrit :

> Hi, I am trying to understand what will happen in my long-running twisted 
> server program when the available memory is low. 

Probably nothing good.

> If I run the following program with increasing numeric seeds as arguments, 0, 
> 1, 2, 3, 4, … , some of the time the out of memory condition will crash and 
> exit the program right away (when the MemoryError is raised inside twisted 
> core code), and other times it will just carry on with an UnhandledError (if 
> the MemoryError is raised inside my hi() function below).

Yes.

Resource exhaustion testing is tough, especially in Python, where literally 
every function call may (non-deterministically) allocate memory.  MemoryError 
is an exception that you may see at any time, in any context, without warning.  
Most notably you may encounter a MemoryError when attempting to handle a 
MemoryError and there's not much you can do about it at that point.

Ostensibly, Twisted could deal with this "better" by special-casing MemoryError 
in top-level error handlers and falling through to exit, rather than attempting 
to log; but, in cases where only a localized area is experiencing memory 
pressure and the exception causes cleanup to happen correctly, this would 
overzealously exit your service even in cases where it could recover.

So: don't exhaust your available memory.  It will cause a lot of unpredictable 
problems.

If you have a better idea for how Twisted might handle this generally though, 
I'm happy to hear it :).

-glyph

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to