クラウドインテグレーションサービス「雲斗」のブログ

芝公園にある創研情報株式会社がAWS を 中心にクラウドの基本から便利な使いかたまでをお伝えしていきます。

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の値が減っていることを確認する。

-CentOS, Red Hat Enterprise Linux

Bitnami