RHEL 7.2のメモリ使用量、free -m
:
total used free shared buff/cache available
Mem: 386564 77941 57186 687 251435 306557
Swap: 13383 2936 16381
使用済みスワップは2936Mであることがわかります
次のように最小値に減らしたい
echo 1 > /proc/sys/vm/swappiness
sysctl -w vm.swappiness=1
echo "vm.swappiness = 1" >> /etc/sysctl.conf
10分後、もう一度チェックしますが、それでもOSはスワップを使用しました
free -m
:
total used free shared buff/cache available
Mem: 386564 77941 57186 687 251435 306557
Swap: 13389 2930 16381
なぜ私たちがしなかった行動が即座に影響を与えるのでしょうか?
スワップを0にするには、OSを再起動する必要がありますか?
例
vmstat
を実行します:
vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 85740 20255872 2238248 183126400 0 0 7 162 0 0 7 1 92 0 0
vm.swappiness = 1を減らします
10分後にvmstatを実行します。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 85740 20255872 2238248 183126400 0 0 7 162 0 0 7 1 92 0 0
以前に言われたように( なぜswappinessが機能しないのですか? を参照)、swappiness
を変更しても、カーネルがメモリを解放する必要がある場合にのみ、カーネルが行う決定に影響します。これを減らしても、スワップアウトされたものすべてがカーネルによって再ロードされることはありません。
vmstat
の出力は、スワップがアクティブに使用されていないことを示していますie現在のワークロードでは、実際に使用されているページは必要ありませんスワップアウト。
カーネルがスワップを使用する傾向にある方法でマイクロ管理を試みても意味がありません。ワークロードに応じて、ページキャッシュを優先する必要があるかどうかを決定し、それに応じてswappiness
を調整してから、システムを実行したままにします。
本当にスワップをクリアしたい場合、それを無効にして再度有効にします:
swapoff -a && swapon -a
free -m
は、スワップの使用に関する信頼できる情報源ではありません。代わりに、一時的にスワップを変更するエコーコマンド vmstatbefore and after を使用してください。
1)swapoff -a && swapon -a && vmstat
2)スワッピングを必要とする作業を行います
3)vmstat
これで、swappinessを変更する前に、どの程度のスワッピングが行われているかがわかります。スワッピングが行われていない場合は、スワッピングを行う他のジョブを探します。
4)and echoコマンドを使用して一時的にswappinessを変更する
5)swapoff -a && swapon -a && vmstat
6)スワッピングを必要とする作業を行います
7)vmstat
8)siとsoの値を比較します。
監視する値は次のとおりです。
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).
RHEL 7パフォーマンスチューニングガイド にも役立つ情報があります。
Swaponとswapoffについて思い出させてくれた Stephen Kitt に感謝します。