Show More
@@ -0,0 +1,44 b'' | |||
|
1 | # memorytop requires Python 3.4 | |
|
2 | # | |
|
3 | # Usage: set PYTHONTRACEMALLOC=n in the environment of the hg invocation, | |
|
4 | # where n>= is the number of frames to show in the backtrace. Put calls to | |
|
5 | # memorytop in strategic places to show the current memory use by allocation | |
|
6 | # site. | |
|
7 | ||
|
8 | import gc | |
|
9 | import tracemalloc | |
|
10 | ||
|
11 | ||
|
12 | def memorytop(limit=10): | |
|
13 | gc.collect() | |
|
14 | snapshot = tracemalloc.take_snapshot() | |
|
15 | ||
|
16 | snapshot = snapshot.filter_traces( | |
|
17 | ( | |
|
18 | tracemalloc.Filter(False, "<frozen importlib._bootstrap>"), | |
|
19 | tracemalloc.Filter(False, "<frozen importlib._bootstrap_external>"), | |
|
20 | tracemalloc.Filter(False, "<unknown>"), | |
|
21 | ) | |
|
22 | ) | |
|
23 | stats = snapshot.statistics('traceback') | |
|
24 | ||
|
25 | total = sum(stat.size for stat in stats) | |
|
26 | print("\nTotal allocated size: %.1f KiB\n" % (total / 1024)) | |
|
27 | print("Lines with the biggest net allocations") | |
|
28 | for index, stat in enumerate(stats[:limit], 1): | |
|
29 | print( | |
|
30 | "#%d: %d objects using %.1f KiB" | |
|
31 | % (index, stat.count, stat.size / 1024) | |
|
32 | ) | |
|
33 | for line in stat.traceback.format(most_recent_first=True): | |
|
34 | print(' ', line) | |
|
35 | ||
|
36 | other = stats[limit:] | |
|
37 | if other: | |
|
38 | size = sum(stat.size for stat in other) | |
|
39 | count = sum(stat.count for stat in other) | |
|
40 | print( | |
|
41 | "%s other: %d objects using %.1f KiB" | |
|
42 | % (len(other), count, size / 1024) | |
|
43 | ) | |
|
44 | print() |
General Comments 0
You need to be logged in to leave comments.
Login now