なぜスワップ機能が機能しないのですか?

なぜスワップ機能が機能しないのですか?

利用可能なRAMが2GしかないRHEL 7システムがあります。

free -g
              total        used        free      shared  buff/cache   available
Mem:             31          28           0           0           1           2
Swap:            15           9           5

vm.swappiness = 100だから私たちは/etc/sysctl.conf10の代わりにinを使ってswappinessを最大に増やすことに決め、sysctl -pその設定を適用しました。

しばらくして、状態を再確認してください。

 free -g
              total        used        free      shared  buff/cache   available
Mem:             31          28           0           0           2           2
Swap:            15           9           5

ご覧のとおり、新しいスワップ可能性の設定にもかかわらず、free -g使用可能なRAMは2Gのままです。なぜ?ここに問題がありますか?

15Gを見ると予想使用される交換。

また、以下の事項を確認しました。

cat /proc/sys/vm/swappiness
100

したがって、すべてが新しい設定に従って機能しますが、free同じ状況を示す必要があります。どうなりますか?

答え1

設定swappinessが期待どおりに機能しています。増加により、swappinessシステムが他のものよりもスワップを好むことはありません。増加はswappinessページキャッシュとスワップのバランスに影響を与えます。カーネルが物理メモリを使用可能にする必要がある場合は、通常、2つの戦略のいずれかを使用して削除できます。つまり、ページキャッシュからページを削除できます(その内容がディスクにあるため)。または、ページをスワップすることをswappiness決定します。ある戦略を他の戦略より好む程度です。 0(最小値)に設定すると、swappinessカーネルはさまざまなハイウォーターマークに達するまでスワップを防ぎ、ページキャッシュからページを削除します。 100(最大値1)に設定すると、カーネルがスワップとスワップを等しく考慮することを意味します。ページキャッシュ。

カーネルがより多くのメモリを必要とする場合にのみ、新しい設定の影響を見ることができます。つまり、キャッシュに使用されるメモリ量が減少する前にスワップ使用量が増加することがわかります。

swappinessカーネルがより多くのメモリを使用可能に保つことはできません。物理メモリは常に無料ではなく使用するのが最善です。したがって、カーネルには物理メモリを先制的に解放する(利用可能なメモリを増やす)インセンティブはありません。

バラよりRHEL 7 パフォーマンス調整ガイドより多くの情報を知りたいです。


¹ RHEL 7 では、最新のカーネルは最大 200 の値を受け入れ、RAM ベースのスワッピングに役立ちます。

答え2

解決策は以下を追加することですvm.watermark_scale_factor(素晴らしい記事このトピックについて)

sudo sysctl -w vm.watermark_scale_factor=1000あなたが探している効果があるはずです:

使用可能なメモリが10%未満に低下すると、10 := watermark_scale_factor / 100カーネルは目を覚ます(ここでは)。スワフードしたがって、メモリページはスワップ領域にスワップされます(またはキャッシュページは破棄されます)。これ実際には異なりますvm.swappiness)空きメモリが20%に達するまで

便利な参考資料:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

関連情報