Comment 5 for bug 183156

Revision history for this message
John A Meinel (jameinel) wrote :

andrew, did you end up confirming this?

I'm doing some memory debugging today, and I've found that just reading the indexes and holding all of the keys in memory can be a rather significant amount of memory.

Specifically:

python -c "
from bzrlib import trace, branch
trace.enable_default_logging()
b = branch.Branch.open('launchpad-2a/devel')
b.lock_read()
maps = []
for vf_name in ['revisions', 'signatures', 'inventories', 'chk_bytes', 'texts']:
    vf = getattr(b.repository, vf_name)
    maps.append(vf.get_parent_map(vf.keys()))
    trace.debug_memory('after %s' % (vf_name,))
b.unlock()
trace.debug_memory('after unlock')
del maps
trace.debug_memory('after del')
list() # Make sure to trigger real garbage collection after big dicts are deleted
import gc
print gc.collect()
trace.debug_memory('after gc')
del b
trace.debug_memory('after del b')
print gc.collect()
trace.debug_memory('after gc')
"

after revisions
VmPeak: 54408 kB
VmSize: 46268 kB
VmRSS: 43332 kB
after signatures
VmPeak: 64664 kB
VmSize: 58500 kB
VmRSS: 55676 kB
after inventories
VmPeak: 90772 kB
VmSize: 82888 kB
VmRSS: 79892 kB
after chk_bytes
VmPeak: 280732 kB
VmSize: 224852 kB
VmRSS: 222164 kB
after texts
VmPeak: 306600 kB
VmSize: 269712 kB
VmRSS: 266688 kB
after unlock
VmPeak: 306600 kB
VmSize: 269712 kB
VmRSS: 266688 kB
after del
VmPeak: 306600 kB
VmSize: 237436 kB
VmRSS: 234412 kB
0
after gc
VmPeak: 306600 kB
VmSize: 237440 kB
VmRSS: 234416 kB
after del b
VmPeak: 306600 kB
VmSize: 237440 kB
VmRSS: 234416 kB
22
after gc
VmPeak: 306600 kB
VmSize: 237440 kB
VmRSS: 234416 kB

So... why isn't any of that memory getting reclaimed, even after deleting the branch and running gc.collect()