RAM消耗在哪里?

时间:2018-01-10 23:21:01

标签: python python-2.7 memory-management memory-leaks

我遇到了使用Python 2.7的RAM消耗问题。当我加载pickle对象时,python进程的内存使用量远远超过RAM上的对象大小。 这是代码:

import dill
import time
import psutil
from pympler import asizeof

with open('results/dynamic_cache_lru_0.250gb.pickle', 'rb') as fh:
    cache = dill.load(fh)
    print('memory used by cache: %.4fmb' % (asizeof.asizeof(cache) / 1024.0 / 1024))
    mi = psutil.Process().memory_info()
    print('rss: %.4fmb' % (mi[0] / 1024.0 / 1024))
    print('vss: %.4fmb' % (mi[1] / 1024.0 / 1024))

这是我得到的输出:

memory used by cache: 247.1717mb
rss: 905.2266mb
vss: 949.2617mb

我不知道是什么在使用额外的RAM,或者它是否被对象本身使用,为什么不计算它的大小。

1 个答案:

答案 0 :(得分:0)

我看到类似的,虽然在一个大约275000个字典的列表中运行代码的结果不那么极端:

before rss: 14.3086mb
before vss: 83.2773mb
memory used by cache: 467.1687mb
after rss: 745.0195mb
after vss: 823.6133mb

我对此没有解释,但我可以告诉你,只是调用asizeof.asizeof(缓存)会使我的内存使用量增加超过80兆字节:

before rss: 14.3125mb
before vss: 83.2773mb
before asizeof rss: 663.1797mb
before asizeof vss: 741.8008mb
memory used by cache: 467.1687mb
after asizeof rss: 745.0195mb
after asizeof vss: 823.6055mb

也许如果你做同样的检查,它可以帮助你缩小原因。