CentOS Red Hat Enterprise Linux
メモリいっぱい空いてるのにswapがどんどん増える怪現象?!
2018/08/31
とあるCentOS7のサーバにおいて、メインメモリがあまり使われず、Swap領域がどんどん増えてくる事象を確認。
DBとしてMySQLは起動してるものの、Swapにデータが展開されるほど大きなプロセスは動いてないはずなんだけど・・・
よくよく調べてみると、最近のCentOS(おそらくRed Hat Linuxも同じ)ではOSレベルでSwapの利用頻度を制御できるようで、今回のサーバはこの設定をデフォルトのまま変更していなかったため、この事象が発生したようです。
ここでは、その対策として行ったことを展開してみます。
---------------------------------------------------------------------------------------
①TeraTerm、PuTTY、sshコマンド等で当該サーバにSSHで接続する。
②当該サーバ監視用に、同じサーバのもう一つSSH接続のコンソールを起動する。起動後に top コマンドでパフォーマンスのモニタリングを実施する。
$ top
③①のコンソールにて、仮想メモリ使用率設定(vm.swappiness)の確認をする。今回のケースではこの値がデフォルト値(=30)です。
$ sudo sysctl vm.swappiness
vm.swappiness = 30
④vm.swappiness 設定ファイルの設定状況を確認する。
$ sudo grep vm.swappiness /usr/lib/tuned/virtual-guest/tuned.conf
vm.swappiness = 30
⑤vm.swappiness 設定ファイルの設定を変更する。ここではできるだけSwapを使わないようにできるだけ小さい値をセット。vm.swappiness は 0~100の範囲でセットできるのですが、0 をセットすると OOM(=Out Of Memory)キラーによりプロセスダウンが起きやすくなるとのことなので、ここでは1をセット。
$ sudo vi /usr/lib/tuned/virtual-guest/tuned.conf
vm.swappiness = 30
↓
vm.swappiness = 1
⑥tuned を再起動する。
$ sudo systemctl restart tuned
⑦設定変更状況を確認する。
$ sudo sysctl vm.swappiness
vm.swappiness = 1
⑧rootになる。
$ sudo su -
⑨swapされているデータをメインメモリに戻す。処理完了まで少し時間がかかり、CPU使用率も少し上がる。
# swapoff -a && swapon -a
※利用可能なメインメモリの空きが少ないと、swapoff コマンドが失敗する可能性あり。この場合はメモリを多く占拠しているプロセスを終了する、または問題なければサーバ再起動をする。
⑩②のコンソール画面のtopの状況を確認、swap usedの値が減っていることを確認する。