Mercurial > hg
view mercurial/utils/memorytop.py @ 46858:85e3a630cad9
revlog: move the details of revlog "v2" index inside revlog.utils.constants
the revlog module is quite large and this kind of format information would handy
for other module. So let us start to gather this information about the format in
a more appropriate place.
We update various reference to this information to use the new "source of truth"
in the process.
Differential Revision: https://phab.mercurial-scm.org/D10305
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 05 Apr 2021 12:21:12 +0200 |
parents | 5b6c0af021da |
children |
line wrap: on
line source
# memorytop requires Python 3.4 # # Usage: set PYTHONTRACEMALLOC=n in the environment of the hg invocation, # where n>= is the number of frames to show in the backtrace. Put calls to # memorytop in strategic places to show the current memory use by allocation # site. import gc import tracemalloc def memorytop(limit=10): gc.collect() snapshot = tracemalloc.take_snapshot() snapshot = snapshot.filter_traces( ( tracemalloc.Filter(False, "<frozen importlib._bootstrap>"), tracemalloc.Filter(False, "<frozen importlib._bootstrap_external>"), tracemalloc.Filter(False, "<unknown>"), ) ) stats = snapshot.statistics('traceback') total = sum(stat.size for stat in stats) print("\nTotal allocated size: %.1f KiB\n" % (total / 1024)) print("Lines with the biggest net allocations") for index, stat in enumerate(stats[:limit], 1): print( "#%d: %d objects using %.1f KiB" % (index, stat.count, stat.size / 1024) ) for line in stat.traceback.format(most_recent_first=True): print(' ', line) other = stats[limit:] if other: size = sum(stat.size for stat in other) count = sum(stat.count for stat in other) print( "%s other: %d objects using %.1f KiB" % (len(other), count, size / 1024) ) print()