繁体   English   中英

tracemalloc 是否从其最近的快照中删除了已释放的 memory?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM