swappiness=1 で構成したにもかかわらず、スワップは依然として高いです。

swappiness=1 で構成したにもかかわらず、スワップは依然として高いです。

ドアサーバーのバージョンがありますrhel 7.5

このサーバーでスワップを使用すると、奇妙に動作します。

1に設定/proc/sys/vm/swappinessし、サーバーを再起動します。

しかし、サーバーは15Gを消費しますが、利用可能なスペースは44Gであることがわかります!

どうすればいいですか?

[root@moon01 network-scripts]# more /proc/sys/vm/swappiness
1
[root@moon01 network-scripts]# free -g
              total        used        free      shared  buff/cache   available
Mem:            125          80          38           0           6          44
Swap:            15          15           0

私が理解したのは、最後の数ギガバイトに近いメモリが利用可能な場合にのみスワップが増加することです。

しかし、それは本当ではありません。

答え1

Linuxでもswappiness=1可能であれば、スワップは引き続き使用されます。ユーザー空間プログラムは、交換を開始するために使用可能なすべてのRAMコアを消費する必要はありません。私はこれを初めて見つけたのでUbuntu Linuxデスクトップに問題があります

私の質問に対する回答とコメントで、誰かがディスクキャッシュを考えられる原因として指摘しました。メモリの「空き」スペースは空の場合がほとんどありません。カーネルは、アプリケーションがより多くのメモリを必要とするたびにキャッシュを放棄できることを知っているので、これをキャッシュ(ディスクキャッシュを含む)に静かに使用します。

カーネルドッカーで参照を探しています。しかし、良い説明があります。ほとんどのプログラムには、起動中にのみ使用され、再び使用されない多くのメモリ(コードを含む)があります。したがって、特にサーバーにはメモリに「ジャンク」が多く、ディスクキャッシュなどの便利なものからスペースを盗みます。 Linuxはこれを知っており、ディスクキャッシュのページを削除するのではなく、ゴミを交換することを選択します。全体として、これはスワップ使用量を徐々に増加させ、キャッシュサイズをゆっくりと増加させる。 「使用可能な」メモリがまだ比較的高い場合でも、これを行います。

簡単に言えば、これは予想される動作であり、それをオフにする簡単な方法はありません。

関連情報