sysctlで永続的なカーネルパラメータ swappiness
設定をしたはずなのにOS再起動しても設定が反映されない事象で少しはまりました。Tunedの動きを制御できれば解決できました。
再起動後にsysctlの設定が反映されない
空きメモリがあるにも関わらずSWAP沢山使ってしまうサーバがあったので、swappinessを調整しようとしました。
まずは暫定対応、問題無く設定でき、SWAPも使わないようになりました。
# cat /proc/sys/vm/swappiness 30 # cat 1 > /proc/sys/vm/swappiness # cat /proc/sys/vm/swappiness 1
次にパラメータを永続化するためにsysctlの設定を行いました。
# cat /proc/sys/vm/swappiness 30 # echo "vm.swappiness = 1" >> /etc/sysctl.conf;grep vm.swappiness /etc/sysctl.conf vm.swappiness = 1 # sysctl -p vm.swappiness = 1 # cat /proc/sys/vm/swappiness 1
再起動を実施後に入ってみると swappiness
が反映されていない。
# reboot $ cat /proc/sys/vm/swappiness 30
Sysctlを再起動すると反映されるので、設定は間違って無さそう。
# systemctl restart systemd-sysctl.service # cat /proc/sys/vm/swappiness 1
どうも調べるとSysctlの設定はTunedの設定で上書きされてしまうみたいということがわかりました。
Tunedはこちらに纏まっていました。 https://runble1.com/centos7-wordpress-tuned/
この環境ではTunedのプロファイルvirtual-guest
の設定が有効化されています。
# tuned-adm active
Current active profile: virtual-guest
プロファイルの設定内容を見てみると vm.swappiness=30
があった。これか。
# cat /usr/lib/tuned/virtual-guest/tuned.conf |grep -4 vm.swappiness # Filesystem I/O is usually much more efficient than swapping, so try to keep # swapping low. It's usually safe to go even lower than this on systems with # server-grade storage. vm.swappiness = 30
方法①Tunedを無効化してsysctlの設定を上書きされないようにする
Tunedがsysctlの設定を上書きしてしまっているので、単純にTunedを無効化すればsysctlの設定が活きます。
# systemctl disable tuned.service # reboot
$ cat /proc/sys/vm/swappiness
1
方法② カスタムTuned Profileを作成
Tuned プロファイルを新規に作成して、そこにKernelパラメータを設定することも可能です。
現在のTunedプロファイルは virtual-guest
です。
# tuned-adm active
Current active profile: virtual-guest
Tunedプロファイルは以下のフォルダに格納されています。
# cd /usr/lib/tuned/ # ls -l 合計 20 drwxr-xr-x 2 root root 23 4月 15 02:01 balanced drwxr-xr-x 2 root root 23 4月 15 02:01 desktop -rw-r--r-- 1 root root 12294 4月 1 00:53 functions drwxr-xr-x 2 root root 23 4月 15 02:01 latency-performance drwxr-xr-x 2 root root 23 4月 15 02:01 network-latency drwxr-xr-x 2 root root 23 4月 15 02:01 network-throughput drwxr-xr-x 2 root root 39 4月 15 02:01 powersave -rw-r--r-- 1 root root 1288 8月 1 2015 recommend.conf drwxr-xr-x 2 root root 23 4月 15 02:01 throughput-performance drwxr-xr-x 2 root root 23 4月 15 02:01 virtual-guest drwxr-xr-x 2 root root 23 4月 15 02:01 virtual-host
virtual-guest
のプロファイルをコピーして my-host
プロファイルを作成します。
vm.swappiness
の値を30から1に変更しました。
# cp -ai /usr/lib/tuned/virtual-guest/ /etc/tuned/my-host/ # vim /etc/tuned/my-host/tuned.conf # diff -U0 /usr/lib/tuned/virtual-guest/tuned.conf /etc/tuned/my-host/tuned.conf --- /usr/lib/tuned/virtual-guest/tuned.conf 2015-05-04 05:06:33.000000000 -0400 +++ /etc/tuned/my-host/tuned.conf 2016-08-22 12:47:44.609000000 -0400 @@ -21 +21 @@ -vm.swappiness = 30 +vm.swappiness = 1
Tunedのプロファイルを作成した my-host
に変更します。
# tuned-adm profile my-host Cannot talk to Tuned daemon via DBus. Is Tuned daemon running? Trying to (re)start tuned... Tuned (re)started, changes applied.
# tuned-adm active
Current active profile: my-host
これでTunedが有効化された状態でも、カーネルパラメータの設定が永続化されて反映されるようになります。
(補足)RHELにはSAPのプロファイルもあるみたい
半年前まではSAPばかりだったのが今は懐かしい。
sap SAP ソフトウェアのパフォーマンスを最大化するように最適化されたプロファイルです。enterprise-storage プロファイルをベースにしています。sap プロファイルは、共有メモリー、セマフォ、プロセスが所有するメモリーマップの最大数に関する sysctl 設定も調整します。