Python 2.7有大量内存的MemoryError(64位,Ubuntu)

Ubuntu 14.04上使用60GB RAM的Python 2.7.10(通过conda)。

在IPython笔记本中处理大型数据集。 即使我读“顶部”信息,也有很多GB留在了进程中, 下面是“顶”的代表摘录:

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的驻留空间。 (所有其他进程都很小。)

我的理解(和许多在线资源)意味着总共约31GB的“caching”可以在需要时由程序退出(从caching)。 ( free -m输出在buffers/cache中也显示30 + GB。)

然而,Python没有分配几个GB的新结构。

Python“资源”模块报告的所有限制都未设置。

为什么Python进程不能获取(或者被赋予)更多的空闲地址空间和物理内存呢?

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