通过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中发现内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章