You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
967 B
29 lines
967 B
8 months ago
|
import tracemalloc
|
||
|
import time
|
||
|
|
||
|
class MyTraceMalloc:
|
||
|
def __init__(self):
|
||
|
tracemalloc.start(25) # 保留25个堆栈级别
|
||
|
self.before_snapshot = tracemalloc.take_snapshot()
|
||
|
self.current_snapshot = None
|
||
|
self.top_stats = []
|
||
|
|
||
|
# 内存跟踪情况输出
|
||
|
def display_top_stats(self):
|
||
|
self.current_snapshot = tracemalloc.take_snapshot()
|
||
|
self.top_stats = self.current_snapshot .compare_to(self.before_snapshot, 'lineno')
|
||
|
|
||
|
print("[ Top 10 differences ]")
|
||
|
for stat in self.top_stats[:10]:
|
||
|
print(stat)
|
||
|
current, peak = tracemalloc.get_traced_memory()
|
||
|
print(f"当前内存分配: {current / 1024 / 1024:.2f} MiB")
|
||
|
print(f"峰值内存分配: {peak / 1024 / 1024:.2f} MiB")
|
||
|
|
||
|
self.before_snapshot = self.current_snapshot
|
||
|
|
||
|
def trace_memory(self):
|
||
|
while True:
|
||
|
time.sleep(60) # 每隔60秒输出一次
|
||
|
self.display_top_stats()
|