建议使用哪个Python内存分析器?
时间:2020-03-06 14:30:00 来源:igfitidea点击:
我想知道我的Python应用程序的内存使用情况,尤其想知道哪些代码块/部分或者对象消耗了最多的内存。
Google搜索显示商用的是Python Memory Validator(仅限Windows)。
开源的是PySizer和Heapy。
我没有尝试过任何人,所以我想知道哪个是最好的考虑因素:
- 提供大多数细节。
- 我不必对代码进行最少的更改,也可以不做任何更改。
解决方案
我推荐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。就这样。
我没有尝试过PySizer或者Heapy。我会感谢别人的评论。
更新
上面的代码是针对" CherryPy 2.X"," CherryPy 3.X"," server.quickstart"方法已经删除的,而" engine.start"不带有" blocking"标志。因此,如果我们使用的是" CherryPy 3.X"
# 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()
堆很容易使用。在代码中的某些时候,我们必须编写以下代码:
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编写的图形浏览器。
考虑objgraph库(有关示例使用案例,请参见http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks)。