私の理解では、システムに空きメモリがなくなると、カーネルはプロセスを強制終了してメモリを回復します。しかし、私のシステムでは、これはまったく起こりません。
システムで使用可能なメモリ(たとえば、数百万の文字列を含む配列)よりもはるかに多くのメモリを割り当てる単純なスクリプトを想定します。このようなスクリプトを(通常のユーザーとして)実行すると、システムが完全にフリーズするまですべてのメモリが取得されます(SysRQ REISUBのみが機能します)。
ここで奇妙な部分は、スワップパーティションがマウントされているかどうかに関係なく、コンピューターがフリーズすると、ハードドライブのLEDがオンになり、コンピューターが再起動されるまでそのままの状態が続くことです。
だから私の質問は:
- この動作は正常ですか?通常のユーザーとして実行されたアプリケーションがこのようにシステムをクラッシュさせる可能性があるのは奇妙です...
- Ubuntuがメモリを大量に(または最大に)取得したときにそれらのアプリケーションを自動的に強制終了させる方法はありますか?
追加情報
- Ubuntu 12.04.3
- カーネル3.5.0-44
RAM:4GBから〜3.7GB(グラフィックカードと共有)。*
$ tail -n+1 /proc/sys/vm/overcommit_* ==> /proc/sys/vm/overcommit_memory <== 0 ==> /proc/sys/vm/overcommit_ratio <== 50 $ cat /proc/swaps Filename Type Size Used Priority /dev/dm-1 partition 4194300 344696 -1
Allocation failed
)。しかし、スワップなしでは、コンピューターがフリーズするだけです。この方法で動作するはずです(swapを使用する場合にのみkill)?
tail -n+1 /proc/sys/vm/overcommit_*
出力を試して追加してください。また、ここを参照してください:どのように私はconfigureコンOOMキラー