![](/img/trans.png)
[英]Python NetworkX gives MemoryError with plenty of unused RAM?
[英]Python 2.7 MemoryError (64bit, Ubuntu) with plenty of RAM
具有60GB RAM的Ubuntu 14.04上的Python 2.7.10(通过conda)。
在IPython笔记本中使用大型数据集。 即使我阅读的“热门”信息仍然存在MemoryErrors,仍有很多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的常驻空间。 (所有其他过程都很微小。)
我的理解(和许多在线资源)暗示,大约31GB的“缓存”可在需要时由程序从缓存中撤回。 ( free -m
输出也显示buffers/cache
中有30 + GB。)
但是,Python无法分配只有几个GB的新结构。
Python“资源”模块报告的所有限制均未设置。
为什么Python进程不占用(或不提供)更多的空闲地址空间和物理内存?
也许不是答案,我们需要更多调查和信息,以了解您的确切工作以及配置的内容,但是:您的可用空间不足1 GB(760Mo),但已缓存31Giga。 因此,由于内存碎片,可能没有更多的内存可分配。 我想所有缓存的内存都是一些先前加载/释放的数据剩余/释放的内存。 也许经过一些工作之后,碎片禁止分配这么大的内存。 没有交换,这是一个真正的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.