ここでは、OOM-Killerを介して設定できることovercommit_memory
、および次のことを説明します。
- 2 =オーバーコミットなし。あまりにも多くを求める場合、割り当ては失敗します。
- 0、1 =オーバーコミット(ヒューリスティックまたは常に)。殺すいくつかあまりにも多くのメモリが実際にアクセスしたときに、いくつかの経験則に基づいたプロセス(複数可)。
今、私はそれを完全に誤解しているかもしれませんが、割り当てられたメモリに実際にアクセスしようとするプロセスを強制終了するオプションがないのはなぜですか(またはなぜデフォルトではないのですか)?
重要なシステムプロセスが大量のメモリを要求した場合はどうなりますか?
—
ローレンス14年
そもそも-それはこのことをすることができます。しかし、その質問の最大の問題は、おそらくプロセスがメモリを要求している場合、新しく実行されていることです-つまり、これは非常に現在の処理に関係する新しいプロセスです。OOMで、3日間未開封のimクライアントにシステムメモリの浪費を許可してもらえますか、それともYouTubeが今年実際にロードするのでしょうか。linuxatemyram.com
—
mikeserv
これは、
—
バーマー14年
no overcommit
オプションが本質的に行うことです。プロセスが大量のメモリを要求すると、失敗します。エラーをチェックすると、通常は自身を強制終了します。そうでない場合、malloc()
返されるヌルポインターを逆参照しようとすると、おそらくセグメンテーションエラーが発生し、クラッシュします。
no overcommit
引用されたソース(kernel.org/doc/Documentation/vm/overcommit-accountingなど)によると、実際には2がモードであることに注意してください。それに応じて質問を編集します。