最近、スワップに未使用のバイトが 0 (ゼロ) バイトしかないボックス (実際には Web サーバー VM) を見ましたが、使用可能な RAM (空きではなく、空き + バッファ + キャッシュの合計) は VM の合計 RAM の 60% です。これは今まで見たことがなかったので、これが適切な構成 (ボックスとアプリケーションにとって) なのかどうか疑問に思いました。
VM の管理者は、それを完全に正常なこととして扱い、それがボックスを調整する通常の方法だと言いました。
彼のアイデアは、ボックスに大量のコールド RAM ページがある場合、カーネルがそれを取り出して「実際の」 RAM ページを解放し、データのキャッシュに使用できるようにするというものでした。
私としては、高速なボックスが欲しいならスワップは最後に使うものだと知っていました。だから、以前は swappiness を低い値に設定していました (カーネルがページをスワップ アウトしないようにするため)。しかし、この人のアプローチは、スワップ スペースがある限り多くのデータをスワップ アウトして、キャッシュを増やすのが良いというものでした。そして、確かに、カーネルはスワップされたページもキャッシュできるので、スワップを空けておくのは良くないと彼は言いました。
どうか私の心を落ち着かせてください。VM のスペースを最大限に活用し、このようにして RAM を解放してカーネル ディスク キャッシュをより効率的に使用できるようにするべきではないでしょうか?
正確に言うと、現時点では、スワップ領域は 1 Gb (100% 使用)、VM には 32 Gb の RAM があり、使用可能な RAM は 13 Gb でした。
答え1
少量のスワップ (1GiB は 32GiB の RAM に比べると小さい) を完全に使用しても問題ありません。これは、VM の管理者が説明したとおりです。RAM が利用できることを考慮すると、スワップに残ったものは未使用であり、それをそのままにして、対応する物理メモリをより緊急の目的 (アクティブなワークロードやディスク キャッシュなど) に使用する方が適切です。
スワップの過剰使用は、スワップの量が大きい場合、またはメモリの圧迫によりページがスワップされている場合、そしてさらに重要なのは、スワップが活動は重要、つまりvmstat
ページが常にスワップインおよびスワップアウトされていることを示しています。これは、システムがスラッシング状態にあり、ページを退避するのに時間を費やして、再度スワップインする必要があることを示しています。これは、RAM の量がシステムのワークロードに対して小さすぎる場合に発生します。
私がこれを書いているシステムには若干多くのスワップがあり、あなたの VM と似た状況です。
$ free -m
total used free shared buff/cache available
Mem: 32054 19405 1098 2365 11550 9827
Swap: 6410 6410 0
ただし、インタラクティブなパフォーマンスは良好であり、vmstat
スワップ アクティビティは表示されません。