Mercurial > hg
view mercurial/utils/memorytop.py @ 51719:7558cee89655
dirstate: stringify a few exception messages
Built in exceptions want str, and ProgrammingError converts bytes to str
internally (because it subclasses RuntimeError).
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 18 Jul 2024 22:46:36 -0400 |
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()