繁体   English   中英

具有大量RAM的Python 2.7 MemoryError(64位,Ubuntu)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM