web-dev-qa-db-ja.com

スワップのないLinuxはまだスラッシングを開始します

Debian 9.4、Linux 4.9

RAMにほとんど収まらないものをコンパイルしたり、ルージュプロセスが突然メモリを使い果たし始めたりします。プロセスが使用可能なRAMを超えると、ゼロスワップを有効にしているにもかかわらず、Linuxはディスクのスラッシングを開始します(これを回避するためのスワップはありませんでした)。現在実行中のバイナリのmmapped部分のようなものを破棄し、リロードし始めると思いますか?

この時点で、Xセッションがすぐに応答しなくなり、Xセッション全体が強制終了されて再度ログインできるようになるまで、数十分待つだけです。

解決策を探してみましたが、うまくいかないようです。 OOMキラーはこのプロセスをキャッチせず、vm.overcommit_memory=2GDMとGnomeでログインすることすらできません。

方法はありますかLinuxにまったくスワップしないように指示する?そうすれば、少なくとも失敗したmallocによってルージュプロセスが強制終了される可能性があります。そうでない場合でも、少なくとも、応答しないマシンを見つめている間待つ必要はありません。

または、このシナリオを管理する方法に関する他のヒントはありますか?

2
attila lendvai

利用可能なRAMのほとんどすべてを必要とするソースをコンパイルする場合、それ以上ではないにしても、おそらく唯一のパフォーマンスの高いソリューションは実際のRAMを追加することです。そうは言っても、非常に大量のスワップ(RAMの2倍または3倍など)を追加して、/proc/sys/vm/swappinessを1などの低い値に設定してみてください(カーネル3.5以降では0に設定するとスワップが完全に無効になることに注意してください) )、そのため、スワップは効果的に必要な場合にのみ使用されます。これにより、スラッシングを最小限に抑えることができます。

2