[Updated] D9236: utils: helper function to print top memory allocation site
joerg.sonnenberger (Joerg Sonnenberger)
phabricator at mercurial-scm.org
Thu Oct 29 20:48:01 UTC 2020
Closed by commit rHG4f50d0303557: utils: helper function to print top memory allocation site (authored by joerg.sonnenberger).
This revision was automatically updated to reflect the committed changes.
This revision was not accepted when it landed; it landed in state "Needs Review".
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D9236?vs=23371&id=23372
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D9236/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D9236
AFFECTED FILES
mercurial/utils/memorytop.py
CHANGE DETAILS
diff --git a/mercurial/utils/memorytop.py b/mercurial/utils/memorytop.py
new file mode 100644
--- /dev/null
+++ b/mercurial/utils/memorytop.py
@@ -0,0 +1,44 @@
+# 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 tracemalloc
+import gc
+
+
+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()
To: joerg.sonnenberger, #hg-reviewers
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20201029/bd0a8209/attachment-0002.html>
More information about the Mercurial-patches
mailing list