推荐使用哪种Python内存分析器?



Answers

由于没有人提到它,我将指向我的模块memory_profiler ,它能够memory_profiler打印内存使用情况报告,并且可以在Unix和Windows上运行(在最后一个版本上需要使用psutil)。 输出不是非常详细,但目标是让您了解代码消耗更多内存的位置,而不是对分配的对象进行详尽的分析。

在使用@profile装饰你的函数并使用-m memory_profiler标志运行你的代码之后,它将打印一行一行的报告,如下所示:

Line #    Mem usage  Increment   Line Contents
==============================================
     3                           @profile
     4      5.97 MB    0.00 MB   def my_func():
     5     13.61 MB    7.64 MB       a = [1] * (10 ** 6)
     6    166.20 MB  152.59 MB       b = [2] * (2 * 10 ** 7)
     7     13.61 MB -152.59 MB       del b
     8     13.61 MB    0.00 MB       return a
Question

我想知道我的Python应用程序的内存使用情况,特别想知道哪些代码块/部分或对象消耗了大部分内存。 谷歌搜索显示,商业版本是Python Memory Validator (仅限Windows)。

而开源的是PySizerHeapy

我没有尝试任何人,所以我想知道哪一个是最好的考虑:

  1. 给出大部分细节。

  2. 我必须对我的代码做最少或不做更改。




试试pytracemalloc项目 ,它提供了每个Python行号的内存使用情况。

编辑(2014/04):它现在有一个Qt GUI来分析快照。




我发现meliae比Heapy或PySizer功能更强大。 如果你碰巧正在运行一个wsgi web应用程序,那么Dozer就是一个很好的Dowser中间件包装器




考虑一下objgraph库(有关示例用例,请参阅 )。




Links