質問: linuxは「ramを使い果たす」ことができますか? ホスティングされたvpsがramを使いすぎたためにプロセスが予期せず終了することについて不平を言っている人々のウェブの周りにいくつかの投稿を見ました。これはどのようにして可能ですか?現代のすべてのosは、物理ramを超えるものに対してディスクスワップを使用するだけで「無限ram」を提供すると思いました。これは正しいです?プロセスが「ramが少ないために殺された」場合、何が起こる可能性がありますか?
回答: ramがなくなってもプロセスは強制終了されず、次のようにだまされたときに強制終了されます。 linuxカーネルは通常、プロセスが実際に利用可能な仮想メモリよりも大きな量の仮想メモリを割り当てる(つまり、予約する)ことを許可します(ram +すべてのスワップ領域) プロセスが予約したページのサブセットにのみアクセスする限り、すべてが正常に実行されます。 しばらくして、プロセスが所有するページにアクセスしようとしたが、空きページがなくなった場合、メモリ不足の状況が発生します。 oomキラーは、必ずしも新しいページを要求したプロセスではなく、プロセスの1つを選択し、それを強制終了して仮想メモリを回復します。 これは、たとえばスワップ領域がスリープ状態のデーモンのメモリページでいっぱいになっている場合など、システムがアクティブにスワップしていないときでも発生する可能性があります。これは、メモリをオーバーコミットしないosでは発生しません。それらを使用すると、ランダムプロセスが強制終了されることはありませんが、仮想メモリが使い果たされている間に仮想メモリを要求する最初のプロセスでは、malloc(または同様の)がエラーで返されます。したがって、状況を適切に処理する機会が与えられます。ただし、これらのosでは、ramがまだ残っているときにシステムが仮想メモリを使い果たすこともあります。これは、非常にわかりにくく、一般に誤解されています。