質問は簡単ですが、情報が見つかりませんでした。より正確には、2つのオプション(以下)に関する情報が見つかりましたが、それぞれの場合にどのオプションを使用するかは見つかりませんでした。
オプション 1: カーネルはメモリーから取り出し、ディスクと交換できる最良のページを決定し、新しいページが到着するように除去を行います。
オプション2:カーネルは1つ以上のプロセスを終了し、大量のメモリスペースをすぐに解放します。
2番目のオプションはパフォーマンスの面では良く見えますが(1つずつ解放するのではなく、多くのメモリページを一度に解放します)、プロセスが終了するという問題があります。それでは、私が言及した2つのオプションのうち、最新のLinuxディストリビューションを有効にするものは何ですか?具体的な状況によって異なりますか?
正確なLinuxディストリビューションによって異なる場合は、一般的な方法で回答してください。
答え1
状況に応じて両方のオプションを使用してください。
カーネルがページを割り当てる必要があり、使用可能なページがない場合、または透かしに達した場合は、非アクティブリストからページを回収しようとします(「Inactive」検索/proc/meminfo
)。ページのリサイクルに必ずしも交換が含まれるわけではありません。
- ダーティ以外のファイルのバックアップページは削除されます(バックアップストアから復元可能)。
- ダーティファイルベースのページはバックアップストアに書き込まれ、削除されます。
- 独自のバックアップストアを持たない取り外し可能ページのみがスワッピングに含まれます。
OOMキラーは、上記の方法が不十分な場合にのみ介入して(複数の基準に基づいて)「最悪の」プロセスを選択して終了します。
答え2
スワップスペースがある限り、ページはスワップアウトされます。ページフォルト割り込みを介して再取得します。
スワップ領域がない場合、カーネルの一部は「OOM-killer」というプロセスで手動で作成され、メモリを解放するために別のプロセスを終了します。
答え3
正式に認められた答えである@StephenKittで完璧な答えを見つけることができます。しかし、私が100%理解するためにまだ学ぶべきことがたくさんある私のような学生のために、Stephen Kittの答えに基づいて質問に対する答えの単純化された近似を作りたいと思います。
メインメモリに十分な領域がない場合は、次のいずれかの種類が削除するページが選択されます。
-ダーティではないファイルサポートページ。このような場合は、ページをメモリから削除できます(スワップ領域にコピーする代わりに!)。
-ダーティーファイルサポートページ。この状況では、ページをメモリから削除できますが、スワップ領域にコピーすることはできません。 (そしてその内容をファイルがサポートしている場所にコピーします)。
- ファイルにバックアップされていないページ(汚れているかどうかにかかわらず)この場合、そのページをスワップ領域にコピーする必要があります。ただし、スワップ領域に十分なスペースがない場合、OOMキラーはプロセス全体(またはその一部)を終了する必要があります。