性能よりも安定性を優先させたい。したがって、ハードウェアの制限に達すると、OS全体の代わりに私のプロセスが中断されることを望みます。
必要に応じて、常にカーネルにいくつかのリソースを提供したいと思います。デスクトップセッションかもしれませんが、重すぎてリソースが多すぎるため、わかりません。
しかし、通常、私のリソースの95%はセッションで実行されているプログラムによって消費されます。 WMとカーネルに息をしてマウスを動かすことができるリソースがある限り、停止を意味しても少ないリソースを占有したいと思います。 GUI端末または少なくともTTYでコマンドを実行するのが理想的です。
私はOOMキラーが私のすべての作業を消したり、システム全体を再起動するように強制したくありません。
リソースの使用を制限すると、一部のリソースが残り、カーネルが中断されず、再起動する必要がなくなり、タスクが失われることがなくなり、OOMがスリープモードになります。
私たちが提供するリソースでプログラムを実行できることを知っています。私はミニコンピュータとメインフレームの両方で同じプログラムを使用し、常に実行されます。だから彼らはあまり使用し、良い方向に進む方法があるはずです。
私はそれが乱用されているという事実を否定したくはありませんし、多くのソフトウェアが動作するためにも依存しています。私は限界を好み、彼らはよりよく扱う
答え1
vm.overcommit_memory
設定でメモリオーバーコミットを無効にできます2
。
2 - あなた自身にあまりにも多くを任せないでください。システムの総アドレス空間コミットは、スワップ領域+設定可能な物理RAMの量(デフォルトは50%)を超えることはできません。使用量によっては、ほとんどの場合、ページにアクセスしてもプロセスは終了しませんが、適切な状況ではメモリ割り当てエラーが発生することを意味します。
これにより、カーネルはプロセスに対して実際に保証できるメモリのみをアプリケーションに割り当てます。一方、オーバーコミットが有効な場合、カーネルは、ほとんどのアプリケーションが実際に使用するよりも多くのメモリを要求すると仮定して、実際よりも多くのメモリを割り当てます。オーバーコミットが無効になると、アプリケーションは追加のメモリを要求できない可能性があります。要求されたアプリケーションがクラッシュする可能性があります(malloc()
returnの処理方法によって異なりますNULL
)。
バラよりhttps://www.kernel.org/doc/Documentation/vm/overcommit-accounting