Mercurial > hg
view mercurial/utils/memorytop.py @ 47209:d09b36f69180
packaging: extract invocation of pyoxidizer to own function
I'll be refactoring how the WiX installer creation calls into
pyoxidizer and will need a lower level function for facilitating
that.
The new `run_pyoxidizer()` builds our execution environment
(with gettext available) and invokes `pyoxidizer`.
Differential Revision: https://phab.mercurial-scm.org/D10687
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 06 May 2021 16:07:01 -0700 |
parents | 5b6c0af021da |
children | 1c5810ce737e |
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()