Python 2.7 MemoryError(64位,Ubuntu),有足够的RAM

时间:2015-10-28 07:15:31

标签: python python-2.7 ubuntu

Python 2.7.10(通过conda)在Ubuntu 14.04上,带有60GB RAM。

在IPython笔记本中使用大型数据集。即使我阅读了“顶级' info是否有很多GB留给进程发展。以下是来自' top'

的代表性摘录
KiB Mem:  61836572 total, 61076424 used,   760148 free,     2788 buffers
KiB Swap:        0 total,        0 used,        0 free. 31823408 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                                  
 81176 ubuntu    20   0 19.735g 0.017t   3848 R 100.9 30.3  12:48.89 /home/ubuntu/miniconda/envs/ds_notebook/bin/python -m ipykernel -f /run/user/1000/jupyter/kernel-4c9c1a51-da60-457b-b55e-faadf9ae06fd.json                                              
 80702 ubuntu    20   0 11.144g 9.295g      8 S   0.0 15.8   1:27.28 /home/ubuntu/miniconda/envs/ds_notebook/bin/python -m ipykernel -f /run/user/1000/jupyter/kernel-1027385c-f5e2-42d9-a5f0-7d837a39bdfe.json                                               

所以这两个进程使用的地址空间超过30GB,驻留空间约为26GB。 (所有其他过程都很小。)

我的理解(以及许多在线资源)暗示“缓存”#39;在需要时,程序可以从程序中提取~31GB的总数(来自缓存)。 (free -m的输出也显示buffers/cache中的30 + GB。)

然而,Python未能分配仅几GB的新结构。

Python'资源'报告的所有限制。模块显示未设置。

为什么Python进程不再需要(或被赋予)免费地址空间和物理内存?

1 个答案:

答案 0 :(得分:0)

也许不是答案,我们需要更多的调查和信息,说明你的确切做法和配置是什么,但是: 你有少于1 GB的免费(760Mo),但31Giga缓存。因此,由于内存碎片,可能没有更多的内存可供分配。我想所有缓存的内存都是一些先前加载/释放数据而留下/释放的内存。也许在一些工作之后,碎片禁止分配如此大的内存。没有交换,这是一个真正的问题。