Linuxで仮想マシンにスワップスペースが必要なのはなぜですか?

Linuxで仮想マシンにスワップスペースが必要なのはなぜですか?

nginx(または安定したリソースを使用できる他の軽量デーモン)を実行するLinux VM。 VMには2GBのメモリが割り当てられ、そのうち200〜300MBはオペレーティングシステムとサービスに使用され、残りはファイルキャッシュとバッファに使用されます。特定のユースケースでは、オーバーヘッドは500 MBに簡単に達すると予想されます。

尋ねる:この設定にスワップスペースが必要なのはなぜですか?

「メモリ枯渇防止」という標準的な答えは、次の2つの理由で理解できません。1:メモリ要件はすでに設定されているため、予期しないまたは突然の大幅な増加をサポートする必要はありません。2:それにもかかわらず、交換はOOMの状況を遅らせるだけです。仮想マシンにもっと多くのメモリを割り当てることで、同じことができます。特に、仮想マシンがシンプロビジョニングされていて、使用しない限り誰も見逃さないからです。

休止状態をサポートするための別の一般的な答えは、仮想マシンのサーバーには適用されません。

このようなサーバーでスワップを行う理由はありません。私が何かを見逃しているのでしょうか?

ベストアンサー1

「スワップかどうか」について考えてはいけません。全体的なメモリ割り当て戦略を考え、スワップが必要かどうかを判断する必要があります。これには2つの主な側面があります。

今日のスワップの主な目的は、物理メモリを拡張するのではなく、リサイクルできない他のページにバックアップストレージを提供することです(例えばメモリ割り当てと匿名性mmap)。スワップなしで実行すると、カーネルが物理メモリに匿名メモリを保持し、変化するメモリ需要に対処する能力が低下します。もちろん、自分の仕事量を知っていればいつも利用可能な物理メモリに適しており、これは問題ではありません。

考慮すべき2番目の側面は、カーネルのオーバーコミットポリシーです。デフォルトでは、メモリ割り当てはメモリのロードに関係なくほとんど成功します。ワークロードを制御したい場合は、チェックモード(/proc/sys/vm/overcommit_memory2に設定)で実行するのが役に立つことがよくあります。これにより、コミット制限は、大容量ページに割り当てられていないスワップ領域と物理メモリの合計であり、オーバーコミット率(デフォルト)に制限されます。 50%)調整を行います。スワップなしで実行すると、デフォルトでは物理メモリの半分以上を割り当てることはできません。スワップを追加すると、制限が直線的に増加し、オーバーコミットを増やすよりもリスクが低くなります。 (これは通常のサーバー設定で大規模なJVMを実行しようとしたときに人々を混乱させることがよくあります。)

上記のように、2つの主な側面があると述べましたが、場合によっては考慮すべきもう1つのことがあると思いました(実際には最初のものの変形です)。tmpfsファイルシステムがシステムを簡単に停滞させることができる場合、交換はできません。

これらすべての詳細については、以下をお読みください。proc(5)マンページ乱用に関するセクション、そしてChris Downの最近のブログ投稿は交換を擁護しています。

おすすめ記事