通过tracemalloc模块在python中发现内存泄漏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过tracemalloc模块在python中发现内存泄漏相关的知识,希望对你有一定的参考价值。

我有一个使用开源pytorch模型的python脚本,此代码存在内存泄漏。我正在使用memory_profiler mprof run --include-children python my_sctipt.py运行此文件,并获得以下图像:“我正在尝试通过系统python模块tracemalloc搜索泄漏的原因:

tracemalloc.start(25)
while True:
    ...
    snap = tracemalloc.take_snapshot()
    domain_filter = tracemalloc.DomainFilter(True, 0)
    snap = snap.filter_traces([domain_filter])
    stats = snap.statistics('lineno', True)
    for stat in stats[:10]:
        print(stat)

如果仅查看tracemalloc输出,将无法确定问题。我认为问题出在C扩展程序中,但是,我想确保它是正确的。我试图通过DomainFilter更改域,但仅在0域中输出。

而且,我不理解tracemalloc.start(frameno)所具有的参数的含义,frameno是最近的许多帧,但是当我更改它时什么也没有发生。

接下来我该怎么做才能在代码中找到导致内存泄漏的有问题的地方?

期待您的回答。

我有一个使用开源pytorch模型的python脚本,此代码存在内存泄漏。我正在使用memory_profiler mprof run --include-children python my_sctipt.py来运行它,并获得...

答案

鉴于您的猜测是问题出在C扩展程序中,但是您想确保这是正确的,因此建议您使用不像python特定的工具(例如https://github.com/vmware/chap或至少如果您能够在Linux上运行程序。

以上是关于通过tracemalloc模块在python中发现内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

RuntimeWarning:启用 tracemalloc 以使用 asyncio.sleep 获取对象分配回溯

Python基础及语法

分析正在运行的 Python 进程的内存使用情况

python中的模块通过setup.py怎么安装

python---Logging日志模块

Python 模块 - 范围