[Twisted-Python] profiling twisted

Maarten ter Huurne maarten at treewalker.org
Wed Jun 27 13:04:18 EDT 2007


On Wednesday 27 June 2007, Markus Schiltknecht wrote:

> Now, I'm wondering if there's a profiling tool, which can quickly tell
> me what events are blocking my server. I have even deferred the file I/O
> to separate threads, as I've suspected them to make the server behave
> poorly when under load. But there still seems to be something
> blocking...  What do you use to find the callbacks which block (for too
> long)?

Does your server process use a lot of memory?

I had problems with a random simple request taking a long time every now and 
then and it turned out to be the Python garbage collector. The collection 
itself can take some time if you have a lot of objects. If some of the Python 
process ends up in the swap instead of main memory, garbage collection will 
block until it is swapped back in, which can slow it down dramatically.

Using multiple threads does not give you any performance advantage in this 
case: during garbage collection the entire Python VM is frozen.

One thing you could try is:
  import gc
  gc.disable()
in the startup code of your server.

Note that this does not turn off all memory recycling; it only turns off the 
mark-and-sweep part of the garbage collector. Objects which have a zero 
reference count are still collected.

Bye,
		Maarten




More information about the Twisted-Python mailing list