当前位置: 首页 > 面试题库 >

如何剖析Python中的内存使用情况?

孔驰
2023-03-14
问题内容

最近,我对算法产生了兴趣,并通过编写一个简单的实现,然后以各种方式对其进行了优化来开始探索它们。

我已经熟悉了用于分析运行时的标准Python模块(对于大多数事情,我发现IPython中的timeit magic函数就足够了),但是我也对内存使用感兴趣,因此我也可以探索这些折衷方案(例如,缓存先前计算的值与根据需要重新计算它们的表的成本)。是否有一个模块可以为我配置给定功能的内存使用情况?


问题答案:

在这里已经回答了这个问题:Python memory profiler

基本上,你可以执行以下操作(引用自Guppy-PE):

>>> from guppy import hpy; h=hpy()
>>> h.heap()
Partition of a set of 48477 objects. Total size = 3265516 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0  25773  53  1612820  49   1612820  49 str
     1  11699  24   483960  15   2096780  64 tuple
     2    174   0   241584   7   2338364  72 dict of module
     3   3478   7   222592   7   2560956  78 types.CodeType
     4   3296   7   184576   6   2745532  84 function
     5    401   1   175112   5   2920644  89 dict of class
     6    108   0    81888   3   3002532  92 dict (no owner)
     7    114   0    79632   2   3082164  94 dict of type
     8    117   0    51336   2   3133500  96 type
     9    667   1    24012   1   3157512  97 __builtin__.wrapper_descriptor
<76 more rows. Type e.g. '_.more' to view.>
>>> h.iso(1,[],{})
Partition of a set of 3 objects. Total size = 176 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0      1  33      136  77       136  77 dict (no owner)
     1      1  33       28  16       164  93 list
     2      1  33       12   7       176 100 int
>>> x=[]
>>> h.iso(x).sp
 0: h.Root.i0_modules['__main__'].__dict__['x']
>>> 


 类似资料:
  • Ceph 监视器、 OSD 、和元数据服务器可利用 tcmalloc 生成堆栈剖析,此功能依赖 google-perftools : sudo apt-get install google-perftools 剖析器会把输出保存到 log file 目录(如 /var/log/ceph ),详情见日志记录和调试。剖析器日志可用 Google 性能工具来查看,执行如下命令: google-pprof

  • 问题内容: 我知道Valgrind,但它只是检测内存管理问题。我要搜索的是一个概述的工具,程序的哪些部分确实消耗了多少内存。带有树形图的图形表示(就像KCachegrind对Callgrind所做的那样)会很酷。 我在Linux机器上工作,所以Windows工具对我没有太大帮助。 问题答案: 使用massif,这是Valgrind工具的一部分。massif- visualizer 可以帮助您绘制数

  • 问题内容: 我意识到之前在SO上已经问过类似的问题,但是让我准确描述一下我需要做的事情: 我有一组运行命令行Java应用程序的测试,我想向它们添加内存配置文件。我看到的一个选择是将代码(可能使用第三方工具/库)添加到应用程序中,以提供内存快照。另一种选择是使用第三方工具为我管理/安装我的应用程序和JVM(理想情况下不需要我更改代码)。我在想类似Valgrind的东西,但是对于Java。如果可能的话

  • 本文向大家介绍从Python的源码浅要剖析Python的内存管理,包括了从Python的源码浅要剖析Python的内存管理的使用技巧和注意事项,需要的朋友参考一下 Python 的内存管理架构(Objects/obmalloc.c):     0. C语言库函数提供的接口     1. PyMem_*家族,是对 C中的 malloc、realloc和free 简单的封装,提供底层的控制接口。   

  • 问题内容: 在一次采访中,我被要求计算内存使用量,如果其中有200万个项目,则估计将消耗多少内存。 例如: 映射是这样的。 我如何估计Java中此HashMap对象的内存使用情况? 问题答案: 简短的答案 为了找出对象的大小,我将使用探查器。例如,在YourKit中,您可以搜索对象,然后获取它以计算其深度大小。这将使您很清楚地知道如果对象是独立的,则使用多少内存,并且该对象的大小是保守的。 怪癖

  • 本文向大家介绍python中使用psutil查看内存占用的情况,包括了python中使用psutil查看内存占用的情况的使用技巧和注意事项,需要的朋友参考一下 有的时候需要对python程序内存占用进行监控,这个时候可以用到psutil库,Anaconda中是自带的,如果import出错,可以用pip install psutil(安装在python中)或conda install psutil(