
當我運行一段使用過多 RAM 的 Python 程式碼時,我的電腦會開始嚴重交換,以至於我必須進行硬重啟。為了解決這個問題,我關閉了交換,假設 OOM 殺手會介入。也就是說,一旦使用了所有 RAM,我就可以聽到硬碟的抖動,電腦凍結,我必須進行硬重啟。
可能發生了什麼以及我該如何解決它?
我的系統運行的是 Ubuntu 14.04.2 LTS、3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux,具有 8GB RAM。
我的 /etc/fstab 顯示
# / was on /dev/sda1 during installation
UUID=80919e96-e83b-4c88-b30e-8673e1faa3b4 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
#UUID=68064725-c1bb-4293-b8d1-45b2a42fb7b4 none swap sw 0 0
更多細節
tail -n+1 /proc/sys/vm/overcommit_*
==> /proc/sys/vm/overcommit_memory <==
0
==> /proc/sys/vm/overcommit_ratio <==
50
cat /proc/sys/vm/oom_kill_allocating_task
0
範例程式碼
我很遺憾地說我不知道如何製作一個顯示此問題的簡約 python 範例。然而,這絕對是非極簡主義代碼 http://paste.ubuntu.com/11621823/。只需更改程式碼中“path”的值並運行即可。在我的系統上,它耗盡了所有 RAM,然後完全凍結了系統。
答案1
你的問題是你的python code
,與……無關swap
。
Swap
當記憶體負載增加時,作業系統會使用空間。然後那些目前不使用的程序被移動到交換空間(一個分割區)。透過這種方式,可以為目前正在運行的進程釋放更多記憶體。當移動到交換區的程序被使用時,它就會從交換區移回記憶體。
這種交換方式有助於解決運行某些程式需要比可用記憶體量更多的記憶體的情況。
由於您關閉了交換,這不會解決您的問題,只會增加問題。我能想到的解決你的問題的唯一解決方案是優化你的 python 程式碼以使用更少的記憶體或增加機器中的記憶體。
另外,如果您可以將程式碼放在這裡,以便人們可以幫助優化它,那就更好了。