我还没有尝试过这些工具,所以想知道哪一个最好,考虑以下几点:
提供了最详细的信息。
使我对代码更改的要求最小或没有。
提供了最详细的信息。
使我对代码更改的要求最小或没有。
我的模块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
memory_profiler
,但认为它不是一个好选择。它会使程序执行变得非常缓慢(在我的情况下大约慢了30倍)。 - AnnetteCguppy3非常容易使用。 在您的代码的某个点上,您需要编写以下内容:
from guppy import hpy
h = hpy()
print(h.heap())
这将为您提供以下输出:
Partition of a set of 132527 objects. Total size = 8301532 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 35144 27 2140412 26 2140412 26 str
1 38397 29 1309020 16 3449432 42 tuple
2 530 0 739856 9 4189288 50 dict (no owner)
你也可以查找对象的引用来源并获取有关统计信息,但是有关此方面的文档有点稀少。
还有一个使用Tk编写的图形浏览器。
对于Python 2.x,请使用Heapy。
pip install https://guppy-pe.svn.sourceforge.net/svnroot/guppy-pe/trunk/guppy
安装。 - James Snyderboost::python
对象,那么能够看到一些例子就很不错! - amos我推荐使用 Dowser。它非常易于设置,而且您的代码不需要做任何更改。您可以通过简单的Web界面查看每个类型对象的计数、查看活动对象列表、查看对活动对象的引用。
# memdebug.py
import cherrypy
import dowser
def start(port):
cherrypy.tree.mount(dowser.Root())
cherrypy.config.update({
'environment': 'embedded',
'server.socket_port': port
})
cherrypy.server.quickstart()
cherrypy.engine.start(blocking=False)
你需要导入memdebug,并调用memdebug.start。就是这样。# memdebug.py
import cherrypy
import dowser
def start(port):
cherrypy.tree.mount(dowser.Root())
cherrypy.config.update({
'environment': 'embedded',
'server.socket_port': port
})
cherrypy.engine.start()
Muppy是Python的又一个内存使用分析器,重点在于发现内存泄漏问题。
Muppy旨在帮助开发人员识别Python应用程序中的内存泄漏问题。它能够跟踪运行时的内存使用情况,并识别出哪些对象正在泄漏。此外,还提供了工具来定位未释放对象的源头。
我正在为Python开发一个名为memprof的内存分析器:
http://jmdana.github.io/memprof/
它允许您在装饰的方法执行期间记录和绘制变量的内存使用情况。您只需使用以下导入库即可:
from memprof import memprof
使用以下方式美化你的方法:
@memprof
这是一个关于如何查看绘图的示例:
该项目托管在GitHub上:
a
,b
和c
是变量的名称。您可以在http://github.com/jmdana/memprof找到文档。如果您有任何问题,请随时在GitHub上提交问题或发送电子邮件到文档中找到的邮件列表。 - jmdana还可以尝试使用pytracemalloc项目,该项目提供了每个Python代码行的内存使用情况。
编辑(2014/04):现在它有一个Qt GUI用于分析快照。
tracemalloc
现在成为Python标准库的一部分。请参阅https://docs.python.org/3/library/tracemalloc.html。 - Dan Milon