簡體   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