SOLVED (was MemoryError in 2.2.0 in odd case: Can I reduce memory requirements?)
Doug Lee
dgl at dlee.org
Wed Jan 12 15:51:14 UTC 2011
Finally got this server upgraded from Python 2.4 to Python 2.5; fixed
the MemoryErrors. Surprising, but I'll take it...
On Wed, Jan 12, 2011 at 09:52:44AM -0500, Doug Lee wrote:
I am working on a project managed upstream by Subversion and
containing, along with normal versioned source code files, versioned
binary files, some of which are large. One in particular is 82
megabytes or so in size. The project is managed by another company,
so policies on what is versioned are out of my control.
I'm trying to manage local changes for a team using Bazaar. I share
local commits through a common branch on our Internet server, which
(sheepish grin) happens to run FreeBSD 4.11 - very old, but difficult
to upgrade at this point. The server runs Python 2.4 and uses the
slow Python code in place of things like CElementTree, in case that
matters (but for this issue, I doubt it does). I use bzr+ssh protocol
to talk to our server.
The issue: Repository packs and some checkout, push, etc. operations
crash the server bzr process with MemoryErrors. I'm not convinced that
the problem only occurs in pack/autopack though, because I don't always
see .bzr.log entries indicating packing first. The server has at least
two gig of memory. The problems seem to occur when one of the big binary
files is updated. Example sequence: update local branch by other means
(e.g., from upstream svn), receive update to large binary file, bzr push
to our server, crash on server with MemoryError, local bzr process hangs
for a long time waiting for answers.
The last error I saw follows and occurred in a string join() call
or perhaps the real_write() call surrounding it. At this point, a
lightweight checkout from this server is not possible, though if I
populate the local branch by other means, I can successfully switch
to this server.
I'm wondering if there's anything I can do to reduce the memory
requirements here. I understand that my use case is far from normal
though.
More details:
I checked resource limits: stacksize seems locked to 64K and datasize
to 512 meg (that's to do with how far a process can extend its data
segment via sbrk(), but I don't know if Python would still use that).
All other limits are unlimited. I can't seem to extend the datasize
limit past 512 meg even as root, so I assume this is set in stone for
some reason. I believe if bzr hit a stacksize limit, it would get a
SIGSEGV, which I'm not seeing.
Example .bzr.log session:
Wed 2011-01-12 08:03:22 -0500
1.178 bazaar version: 2.2.0
1.195 bzr arguments: [u'serve', u'--inet', u'--directory=/', u'--allow-writes']
1.406 looking for plugins in /var/bzr/home/.bazaar/plugins
2.224 looking for plugins in /usr/local/lib/python2.4/site-packages/bzrlib/plugins
2.515 encoding stdout as osutils.get_user_encoding() 'US-ASCII'
3.362 failed to load compiled extension: No module named _dirstate_helpers_pyx
3.608 WARNING: using slower ElementTree; consider installing cElementTree and make sure it's on your PYTHONPATH
4.103 failed to load compiled extension: No module named _groupcompress_pyx
184.544 Traceback (most recent call last):
File "/usr/local/lib/python2.4/site-packages/bzrlib/smart/protocol.py", line 907, in accept_bytes
_StatefulDecoder.accept_bytes(self, bytes)
File "/usr/local/lib/python2.4/site-packages/bzrlib/smart/protocol.py", line 402, in accept_bytes
self.state_accept()
File "/usr/local/lib/python2.4/site-packages/bzrlib/smart/protocol.py", line 1013, in _state_accept_expecting_message_part
self.done()
File "/usr/local/lib/python2.4/site-packages/bzrlib/smart/protocol.py", line 1051, in done
raise errors.SmartMessageHandlerError(sys.exc_info())
SmartMessageHandlerError: The message handler raised an exception:
Traceback (most recent call last):
File "/usr/local/lib/python2.4/site-packages/bzrlib/smart/protocol.py", line 1049, in done
self.message_handler.end_received()
File "/usr/local/lib/python2.4/site-packages/bzrlib/smart/message.py", line 167, in end_received
self.responder.send_response(self.request_handler.response)
File "/usr/local/lib/python2.4/site-packages/bzrlib/smart/protocol.py", line 1211, in send_response
self._write_prefixed_body(response.body)
File "/usr/local/lib/python2.4/site-packages/bzrlib/smart/protocol.py", line 1138, in _write_prefixed_body
self._write_func(bytes)
File "/usr/local/lib/python2.4/site-packages/bzrlib/smart/protocol.py", line 1095, in _write_func
self.flush()
File "/usr/local/lib/python2.4/site-packages/bzrlib/smart/protocol.py", line 1099, in flush
self._real_write_func(''.join(self._buf))
MemoryError
--
Doug Lee dgl at dlee.org http://www.dlee.org
SSB BART Group doug.lee at ssbbartgroup.com http://www.ssbbartgroup.com
The very smart may feel they have nothing to learn from anyone;
The very wise will find something to learn from everyone. (7/14/01)
--
Doug Lee dgl at dlee.org http://www.dlee.org
SSB BART Group doug.lee at ssbbartgroup.com http://www.ssbbartgroup.com
There is more freedom in knowing how to handle pain than in knowing
how to avoid it. (4/29/01)
More information about the bazaar
mailing list