【问题标题】:Python 2.7 MemoryError (64bit, Ubuntu) with plenty of RAM具有大量 RAM 的 Python 2.7 MemoryError(64 位,Ubuntu)
【发布时间】:2015-10-28 07:15:31
【问题描述】:

具有 60GB RAM 的 Ubuntu 14.04 上的 Python 2.7.10(通过 conda)。

在 IPython 笔记本中处理大型数据集。即使我阅读了“顶级”信息,仍会出现 MemoryErrors,但仍有许多 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 的“缓存”总量。 (free -m 的输出在buffers/cache 中也显示 30+GB。)

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

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

为什么 Python 进程不再占用(或被给予)更多空闲地址空间和物理内存?

【问题讨论】:

  • 我遇到了同样的 RAM 问题(或类似问题)

标签: python python-2.7 ubuntu


【解决方案1】:

也许不是答案,我们需要更多调查和信息,了解您的具体操作以及您的配置,但是: 您的可用空间少于 1 GB (760Mo),但缓存了 31Giga。因此,由于内存碎片,可能没有更多的内存可供分配。我想所有缓存的内存都是一些先前加载/释放数据留下/释放的内存。也许经过一些工作,碎片禁止分配这么大的内存。如果没有交换,这是一个真正的问题。

【讨论】:

  • Linuxatemyram.com(以及其他来源)提出了一个令人信服的案例,即全部 30GB+ 的“缓存”内存应该可供请求的程序使用。而且,64 位可以处理超过 1800 万兆兆字节的空间,因此应该有一个没有碎片的范围。因此,虽然我可以相信碎片是相关的,但我想知道 30+GB 空闲空间可能无法使用并且与任何进程没有明确关联的机制。
猜你喜欢
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
相关资源
最近更新 更多