スワップをオフにしても RAM を過剰に使用するとシステムがハングする

スワップをオフにしても RAM を過剰に使用するとシステムがハングする

RAM を大量に使用する Python コードを実行すると、コンピュータがひどくスワップし始め、ハード リブートしなければならなくなりました。これを修正するために、OOM キラーが介入すると想定してスワップをオフにしました。しかし、まったく同じ症状がまだ発生します。つまり、すべての RAM が使用されるとハード ドライブが激しく揺れ、コンピュータがフリーズし、ハード リブートしなければならなくなります。

何が起こっているのでしょうか、どうすれば修正できるのでしょうか?

私のシステムは、8GB の 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 を実行しています。

私の/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 コードを最適化してメモリ使用量を減らすか、マシンのメモリを増やすことです。

また、他の人が最適化を手伝うことができるように、ここにコードを置いておくと良いでしょう。

関連情報