我的ipython内核占用了几(近十)Gb的内存。我认为这来自于一些操作期间可能产生的大型对象(矩阵,列表,numpy数组等),现在不再需要了。
我想 列出所有已定义的对象 , 并按 其内存占用量 对其 进行 排序
。有没有简单的方法可以做到这一点?对于某些类型,有nbytes
方法,但不是全部。因此,我正在寻找一种通用方法来列出我制作的所有对象及其内存占用情况。
假设你正在使用ipython
或者jupyter
,你需要做的工作一点点地得到一个列表中的所有对象的 你
已经定义。这意味着要提供一切globals()
和剔除这些对象modules
,builtins
,ipython objects
,等等。一旦你确定你有这些对象,那么你就可以继续与抢夺它们的大小sys.getsizeof
。可以总结如下:
import sys
# These are the usual ipython objects, including this one you are creating
ipython_vars = ['In', 'Out', 'exit', 'quit', 'get_ipython', 'ipython_vars']
# Get a sorted list of the objects and their sizes
sorted([(x, sys.getsizeof(globals().get(x))) for x in dir() if not x.startswith('_') and x not in sys.modules and x not in ipython_vars], key=lambda x: x[1], reverse=True)
请记住,对于python对象(使用python的内置函数创建的对象),sys.getsizeof
将非常准确。但是使用第三方库创建的对象可能有点不准确。此外,请注意,sys.getsizeof
如果对象由垃圾收集器管理,则会增加额外的垃圾收集器开销。因此,某些事情看起来可能比实际的要重。
附带说明一下,numpy
的.nbytes
方法可能会引起误解,因为它不包括数组对象的非html" target="_blank">元素属性消耗的内存。
我希望这有帮助。
问题内容: 我正在使用iPython运行我的代码。我想知道是否有任何模块或命令可以让我检查对象的内存使用情况。例如: 类似于并返回对象使用的内存。 问题答案: 不幸的是,这是不可能的,但是有很多近似答案的方法: 对于非常简单的对象(例如,整数,字符串,浮点数,双精度数),它们或多或少地表示为简单的C语言类型,您可以像John Mulder的解决方案那样简单地计算字节数。 对于更复杂的对象,一个很好
我想使用Jupyter笔记本,但在进行基本导入(如导入matplotlib)时遇到困难。我想这是因为我有几个用户管理的python安装。例如: 我以前有anaconda,但是从~/anaconda目录中删除了if。现在,当我启动Jupyter笔记本时,我得到一个内核错误: 我该怎么办?!
问题内容: 我有一个简单的pojos(一个用户类)的列表,其中包含约15个简单字段和1个arrayList。这些代表用户,可能会将100或1000个用户存储在内存中,以避免每次都从外部系统检索它们。(我正在使用Ehcache) 我想通过junit测试知道K个用户列表使用了多少内存。 我的直觉是,即使像一千个这样的简单pojo也不会以任何方式威胁(换言之,小于100 Ko) 在此先感谢您的协助。我非
问题内容: 我正在尝试跟踪处理URL的脚本的内存使用情况。基本思想是在将另一个URL添加到cURL多处理程序之前,检查是否存在合理的缓冲区。我正在使用“滚动cURL”概念,该概念在多处理程序运行时处理URL数据。这意味着我可以在每次处理和删除现有URL时通过从池中添加新URL来保持N个连接处于活动状态。 我已经使用了一些积极的结果。添加该标志很有帮助(虽然并不清楚“系统”内存和“ emalloc”
问题内容: 扩展基类时,Java中的内存使用情况如何。 子类是否包含基类的实例(具有其自身的开销和全部开销),还是仅具有其自身的16字节的开销? 那么,更具体地说,Bar实例的内存使用量是多少? 是吗 要不就 问题答案: 没有双重开销。 Java将采用该类,超类,计算所有字段所需的空间,并为一个实例分配所需的空间。 仅从内存的角度来看,根本不存在超类的概念,有Foo的实例仅需要一个int的内存,而
问题内容: 我需要在Java中检查服务器的CPU和内存使用情况,有人知道怎么做吗? 问题答案: 如果你正在专门寻找JVM中的内存: 但是,这些仅应作为估计…