CentOS7再起動でsysctlで設定したカーネルパラメータが反映されないのはTunedが原因だった

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  415 02:01 balanced
drwxr-xr-x 2 root root    23  415 02:01 desktop
-rw-r--r-- 1 root root 12294  41 00:53 functions
drwxr-xr-x 2 root root    23  415 02:01 latency-performance
drwxr-xr-x 2 root root    23  415 02:01 network-latency
drwxr-xr-x 2 root root    23  415 02:01 network-throughput
drwxr-xr-x 2 root root    39  415 02:01 powersave
-rw-r--r-- 1 root root  1288  81  2015 recommend.conf
drwxr-xr-x 2 root root    23  415 02:01 throughput-performance
drwxr-xr-x 2 root root    23  415 02:01 virtual-guest
drwxr-xr-x 2 root root    23  415 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 設定も調整します。

https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Power_Management_Guide/Tuned.html

参考URL

https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Power_Management_Guide/tuned-adm.html

https://www.centos.org/forums/viewtopic.php?t=50704