![](/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.