[英]Does tracemalloc removes freed memory from its recent snapshot?
我正在尝试调试 Python 和 Flask 应用程序,随着时间的推移 memory 增长。
我知道 tracemalloc 跟踪分配给 Python 的 memory,它向我展示了在每个快照中我的程序中分配的 memory 的回溯。
我的问题是最近的快照是否显示了分配的 memory 的历史数据,或者它是否显示了已分配但未释放的 memory。
在我的程序中增加 memory 后,我拍摄了一个 tracemalloc 快照
根据我所做的测试, tracemalloc
似乎没有跟踪已释放的 memory。
import tracemalloc
import gc
tracemalloc.start(1)
y = None
def dump_tracemalloc_snapshot():
gc.collect()
snapshot = tracemalloc.take_snapshot()
stats = snapshot.statistics('traceback')
for stat in stats[:3]:
print("%s memory blocks: %.1f KiB" % (stat.count, stat.size / 1024))
for line in stat.traceback.format():
print(line)
print('\n\n')
def allocate_memory():
global y
x = []
for i in range(100000):
x.append(f"AAA{i}")
y = x
if __name__=="__main__":
allocate_memory()
dump_tracemalloc_snapshot()
del y
dump_tracemalloc_snapshot()
Output:
100001 memory blocks: 6337.7 KiB
File "/Users/jafar.atili/Code/tracemalloc_parser/file.py", line 23
x.append(f"AAA{i}")
1 memory blocks: 0.1 KiB
File "/Users/jafar.atili/Code/tracemalloc_parser/file.py", line 19
def allocate_memory():
1 memory blocks: 0.1 KiB
File "/Users/jafar.atili/Code/tracemalloc_parser/file.py", line 6
def dump_tracemalloc_snapshot():
26 memory blocks: 2.1 KiB
File "/opt/homebrew/Cellar/python@3.11/3.11.1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/linecache.py", line 137
lines = fp.readlines()
2 memory blocks: 0.2 KiB
File "/opt/homebrew/Cellar/python@3.11/3.11.1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/linecache.py", line 143
cache[filename] = size, mtime, lines, fullname
1 memory blocks: 0.1 KiB
File "/Users/jafar.atili/Code/tracemalloc_parser/file.py", line 19
def allocate_memory():
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.