> On Dec 5, 2016, at 10:18 PM, Amber Hawkie Brown <hawk...@atleastfornow.net> 
> wrote:
> 
> 
>> On 6 Dec. 2016, at 17:09, Glyph Lefkowitz <gl...@twistedmatrix.com 
>> <mailto:gl...@twistedmatrix.com>> wrote:
>> 
>> 
>> twisted.logger._initialBuffer can consume a surprisingly large amount of 
>> memory if logging is not initialized
>> 
>> 
>> The way that `twisted.logger` is supposed to work is that at process startup 
>> time, the global log observer has a ring buffer for any messages emitted 
>> before logging is initialized, and emit those messages to the initial set of 
>> log observers passed to `globalLogBeginner.beginLoggingTo`.
>> 
>> The size of this buffer (in `twisted.logger._buffer._DEFAULT_BUFFER_MAXIMUM` 
>> is 65535.  This value was selected arbitrarily, probably because somebody 
>> (me or wsanchez) thought "huh, yeah, 64k, that's probably a fine number); 
>> but of course, that's 64k ''bytes''.
>> 
>> If this were a buffer of actual formatted log messages, of say 200 bytes 
>> each, that would be about 13 megabytes, which is maybe an acceptable amount 
>> of RAM to spend on a log buffer.
>> 
>> However, it isn't that.  It's a buffer of 64k log ''events'', each of which 
>> probably has a `log_logger` and `log_source` set, each of which is an object 
>> attached to potentially arbitrary data.  For example, every `Factory` that 
>> starts up logs something, which means you're holding on to an instance, and 
>> an instance dictionary, and the protocol instance, and the protocol instance 
>> dictionary.  Worse yet, any logged ''failures'' might hold on to all the 
>> stuff on their stack.
>> 
>> Add it all up and you end up with a log buffer totaling in the hundreds of 
>> megabytes, or even gigabytes, once it's full.  In an application that 
>> naively uses Twisted without ever initializing logging, this hangs around 
>> forever.
>> 
>> This buffer should probably be a ''lot'' smaller, and we might want to emit 
>> a warning when it fills up, reminding people that it is ''only polite'' to 
>> start up the logging subsystem, even just to explicitly throw logs away.
> 
> 
> I fixed trac: https://twistedmatrix.com/trac/ticket/8936#ticket 
> <https://twistedmatrix.com/trac/ticket/8936#ticket>
Thanks!

By "Fixed" I take it you mean rolled back, via:

trac@dornkirk:~$ ./virtualenv/bin/pip freeze | grep Trac==
Trac==1.0.13

and
https://github.com/twisted-infra/braid/commit/c2d393fd501c6464b1b475eff214cab64f13ee2a

Don't get me wrong, I'm not complaining :). This is certainly the right thing 
to do for now.  But I'm wondering if you know what's wrong with 1.2 so we can 
upgrade soonish?

-glyph

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

Reply via email to