web-dev-qa-db-ja.com

LinuxOOMディスクI / O。また:スワップ、それは何のために良いですか?

Linux(2.6.37)インストールの1つでOOMキラーに問題があります。コンピュータには4GBのメモリがあり、私は時々それを十分に活用します。そのような場合、私はOOMハンドラーが入って、プロセスを1つか2つ強制終了することによってその仕事をすることを期待しています。これを実行する代わりに、またはおそらく実行しようとしているときに、システムがロックアップし、明日がないようにディスクI/Oを実行します。これが問題です:私はスワップを有効にしていません。何らかの理由で、適切なアクションは1つまたは2つのプロセスを強制終了することですが、スワップレスシステムは依然として大量のディスクI/Oでロックされています。考え?

全体の問題は、Linuxが私が知らない何らかの方法でスワップを必要とするかどうか疑問に思います。これが当てはまるかどうか、そしてその理由についての説明をいただければ幸いです。私は概念レベルでのスワップのアイデア(つまり、仮想メモリ、ページング、オーバーコミット)に精通していますが、私が見逃した可能性のある実装の詳細があるかどうか疑問に思います。

6
extramuros

本当の問題は、なぜスワップなしで実行しているのかということです。特に、RAMの不足に関連する(深刻な)パフォーマンスの問題が発生している場合はどうでしょうか。スワップがないと、実際にシステムが遅くなる可能性があることをご存知ですか?

明らかな解決策は、スワップスペースを追加し、システムを無駄にしないことです。ディスク容量がどれだけ安いかを考えると、一般的な状況は考えられません。1 スワップなしでシステムを構築する必要がある場所ever

あなたの質問に答えることに関して、私はあなたがメモリを使い果たすつもりがないシステムでさえスワップがなぜ重要であるかについての低レベルの詳細のすべてを覚えていません、しかしLinuxカーネルメーリングリストでかどうかについての議論がありましたスワップなしでシステムを実行することは合理的です(そして決定的な答えは多くありませんでした)。一般的なコンセンサスは、通常、常にスワップがありますであり、必要に応じてスワップ性を調整します。

また、LinuxOOMキラーに関するいくつかの重要な警告を誤解していると思います。まず第一に、メモリ不足の問題を処理するためにそれを信頼することは非常に悪い考え(tm)です。それが何を殺すかについては非常に無差別である可能性があり、不安定な、あるいは使用できないシステムが残る可能性があります。はい、それは大量のメモリを消費している最近のプロセスを強制終了しようとします(暴走したプロセスをキャッチしようとするためのマイナーな保護手段)が、保証はありません。私はそれがsshを殺し、Xenプロセスを殺し(Xen仮想ホストサーバー上でVMをクラッシュさせる)、そしてある場合にはNFSを殺すのを見てきました。

IOも。 。 。何が原因なのかはわかりません。おそらく、ファイルシステムまたはディスク関連のプロセスが強制終了されましたか?おそらく、十分なメモリを割り当てることができない場合、プロセスにはある種の「ディスクへのキャッシュ」機能が組み込まれていますか?

別の注意点として、これがデスクトップの場合、Suspend toDiskにはスワップが必要です。サーバーの場合、OOMに依存することは決して良い考えではありません。安定性が損なわれるため、正当な理由はまったくありません。

[1]組み込みシステムは唯一の明らかな例外であり、特に一般的ではありません(組み込みシステムを扱っている場合は、すでに要件を認識しているはずです)。

6

AndreasMが頭に浮かんだと思います(ディスクがすべてスラッシュになる理由)。実行可能ファイルはデマンドページングされます。したがって、通常の操作では、ほぼすべての実行可能ファイルとライブラリが古き良き物理RAMに格納されます。しかし、RAMが少なくなるが、メモリ不足キラーを実行するのに十分なほど低くない場合、これらのページはRAMから削除されます。したがって、ページが削除される状況になります- -最初は問題ありません。最も最近使用されていないページが最初に削除され、とにかく使用していないページが追い出されますが、その後、使用しているページが追い出されますareすぐにそれらをページバックする必要があります。スラッシュシティ。

基本的に、何かがもう少しRAMを使用している場合は、おそらくOOMキラーが起動しますが、まだそこにはいません。数人が言っているように、OOMキラーは無差別であり、通常の操作で使用することを検討する必要があるものよりも、カーネルパニックを回避するための最後の手段です。カスタムセットアップがある場合は、空きメモリを監視するデーモンを作成し、いっぱいになったら選択したポリシーを使用して強制終了することを検討します。

4
hwertz