Hi,
may be this is interesting for some of you:
we found the early binding of ports when starting up zope is problematic in
our load balanced (behind a pound) setup. if a backend restarts and binds its
ports, pound almost immediately thinks it's back in business and starts
sending request. obviously, the server needs some more time to finish its
startup; meanwhile, those requests are being unanswered (at least delayed for
quite a while), and users need to wait for the response (if any). we only use
high ports for the servers, so there's no real need for us to bind the ports
with root privileges (of course it would be cleaner to check if low ports are
configured, and only delay the binding if not).
last not least: the late binding seems to have a huge impact on the startup
time (although this is no hard fact, just a feeling).
our solution is rather simple:
in lib/python/Zope2/Startup/ (or lib/python/Zope/Startup/ for 2.7):
Index: __init__.py
===================================================================
--- __init__.py (revision 30421)
+++ __init__.py (working copy)
(at)(at) -88,8 +88,8 (at)(at)
self.setupPublisher()
# Start ZServer servers before we drop privileges so we can bind to
# "low" ports:
- self.setupZServer()
- self.setupServers()
+ #self.setupZServer()
+ #self.setupServers()
# drop privileges after setting up servers
self.dropPrivileges()
self.makeLockFile()
(at)(at) -100,6 +100,10 (at)(at)
# emit a "ready" message in order to prevent the kinds of emails
# to the Zope maillist in which people claim that Zope has "frozen"
# after it has emitted ZServer messages.
+
+ self.setupZServer()
+ self.setupServers()
+
logger.info('Ready to handle requests')
self.setupFinalLogging()
Cheers,
Sascha
|