列出ipython和jupyter中的内存使用情况

问题描述

假设你正在使用ipython或者jupyter,你需要做的工作一点点地得到一个列表中的所有对象的 已经定义。这意味着要提供一切globals()和剔除这些对象modulesbuiltinsipython 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方法可能会引起误解,因为它不包括数组对象的非元素属性消耗的内存。

我希望这有帮助。

解决方法

我的ipython内核占用了几(近十)Gb的内存。我认为这来自于一些操作期间可能产生的大型对象(矩阵,列表,numpy数组等),现在不再需要了。

我想 列出所有已定义的对象并按 其内存占用量 对其 进行 排序
。有没有简单的方法可以做到这一点?对于某些类型,有nbytes方法,但不是全部。因此,我正在寻找一种通用方法来列出我制作的所有对象及其内存占用情况。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...