web-dev-qa-db-ja.com

なぜswappinessが機能しないのですか?

RHEL 7マシンがあり、使用可能なRAMは2Gのみです。

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

したがって、10の代わりに_vm.swappiness = 100_の_/etc/sysctl.conf_を使用してswappinessを最大に増やすことを決定し、_sysctl -p_を使用して設定を適用しました。

しばらくして、ステータスを再度確認しました。

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

新しいswappiness設定にもかかわらずわかるように、_free -g_から、使用可能なRAMは2Gのままであることがわかります。なぜですか?ここで何が問題になっていますか?

15Gの中古スワップが見られると予想しました。

また、以下を確認しました。

_cat /proc/sys/vm/swappiness
100
_

したがって、すべてが新しい設定に従って機能するはずですが、freeは同じ状況を示しています。ここで何が起こっているのですか?

2
yael

swappiness設定は意図したとおりに機能しています。 swappinessを増やしても、システムは他のものよりもスワップを優先しません。 swappinessを増やすと、ページキャッシュとスワップのバランスに影響します。カーネルが物理メモリを使用可能にする必要がある場合、通常は2つの戦略のいずれかを使用して破棄できます。ページキャッシュからページを破棄するか(コンテンツがディスク上にあるため)、ページを移動してスワップします。 swappinessは、ある戦略を別の戦略よりもどれだけ優先するかを決定します。 swappinessを0(最小)に設定すると、カーネルはさまざまな最高水準点に達するまでスワップを回避し、代わりにページキャッシュからページを削除します。 100(最大)に設定すると、カーネルはページキャッシュのスワッピングと強制排除を同等に検討します。

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

swappinessを使用して、カーネルがより多くのメモリを使用できるようにすることはできません。物理メモリは、空きのままにするよりも常に最適に使用されるため、カーネルは物理メモリを先取りして解放する(使用可能なメモリを増やす)動機はありません。

詳細については、 RHEL 7パフォーマンスチューニングガイド を参照してください。

5
Stephen Kitt