[ZODB-Dev] Very Weird Behaviour :-(
Chris Withers
chrisw at nipltd.com
Mon Jun 9 11:22:19 EDT 2003
Hi,
This is all with Zope 2.6.1, Python 2.1.3 and ZEO 2.0.1b1 and the minor patch in
the ps. There's also DBTab in play and 'Content' might well be a mounted DB,
although I would expected it to be called 'content' so I'm a bit sceptical.
I awoke to a customer complaint that their site wasn't responding. On going
there, it was indeed not responding. ssh'ed to the box to find one process using
about 1GB of memory. Turned out to be one of the threads on the web-serving ZEO
client.
Zope's stop script didn't work, so I had to kill -9 one of the worker threads
for the web client to die. (This on it's own seems to be quite a common pattern,
why is that?)
Now for the different bit, in the logs of the web client, I found lots of these:
2003-06-09T08:13:56 ERROR(200) ZODB Couldn't load state for
'\x00\x00\x00\x00\x00\x12\x1d\x92'
Traceback (innermost last):
File /usr/local/zope/2.6.1_rshl/lib/python/ZODB/Connection.py, line 509, in
setstate
File /usr/local/zope/2.6.1_rshl/lib/python/ZEO/ClientStorage.py, line 524, in
load
(Object: Content)
File /usr/local/zope/2.6.1_rshl/lib/python/ZEO/ServerStub.py, line 73, in zeoLoad
File /usr/local/zope/2.6.1_rshl/lib/python/ZEO/zrpc/connection.py, line 322,
in call
POSKeyError: 0000000000121d92
Identical OIDs in all the errors...
Now, I don't know if this was a symptom of the memory bloat or the cause, but
these errors started at pretty much the same time as the server was first
reported as being unresponsive...
Interesting to note that the storage server appears to have survived unscathed
throughout this.
So, I'm left rather nervous and wondering:
1. What caused the memory bloat, which apparently arrived out of the blue?
2. What those POSKeyErrors meanand should I be worried about them?
Any ideas? zodb-dev seemed the right place as I suspect this is a ZODB problem
at its base...
cheers,
Chris
ps:
diff -r 2.6.1/lib/python/ZPublisher/HTTPResponse.py
2.6.1_rshl/lib/python/ZPublisher/HTTPResponse.py
147a148
> _locked_body = 0
200c201
< def setStatus(self, status, reason=None):
---
> def setStatus(self, status, reason=None, lock=None):
227a229,231
> # lock the status if we're told to
> if lock:
> self._locked_status = 1
262c266,267
< r'(iso[-_]8859[-_]1(:1987)?)))?$',re.I).match
---
> r'(iso[-_]8859[-_]1(:1987)?)))?$',re.I).match,
> lock=None
278a284,289
> # allow locking of the body in the same way as the status
> if self._locked_body:
> return
> elif lock:
> self._locked_body = 1
>
More information about the ZODB-Dev
mailing list