I've found trac's fastcgi backend simply out-dated. I thinks it's direct copied from an old flup source, and since then flup really updates a lot, I've already use thread pool techniques everywhere in our web applications/frameworks for a while, so current trac's fastcgi backend implement just so out-dated and looks wierd when I installed it, really.
But thanks there's WSGI to save us ! I could just replace the fastcgi backend to flup-0.5 (latest, and author claims it maybe final version of flup) and SAVE MEMORY !
and it's simple too,
just install the flup package, and edit your old trac.fcgi / lighttpd's settings.
from trac import __version__ as VERSION
from trac.web.main import dispatch_request
from flup.server.fcgi import WSGIServer
except Exception, e:
print 'Content-Type: text/plain\r\n\r\n',
print 'Trac detected an internal error:'
tb = StringIO.StringIO()
you can change the line which specify
maxSpare,minSpare,maxThreads,I use 100,
you should use less than 381 if you're using
python 2.4 (you'll hit stack limit at least on i386-linux) however if you're using python 2.5 you can change stack size via thread.stack_size,
though I don't think anyone would need that high concurrency (who knows?!).
below's also a sample setting in lighttpd.conf,
what really matters here is to remember add a
"max-procs" => 1
line in it, since we've already using thread pools technique, forking another process seems redundant (and WASTE memory).
fastcgi.server += ("/sandbox" =>
("socket" => "/tmp/trac-sandbox.sock", #need to change for each
"bin-path" => "/var/trac/cgi-bin/trac.fcgi",
"max-procs" => 1, #default 4
"check-local" => "disable",
("TRAC_ENV" => "/var/trac/sandbox")
oh, btw I'm using trac-0.11dev, but I think any version below 0.11 which implement WSGI should also works.