CentOS Stream9にバージョンアップしたらメモリが200MB減ったので対処する

CentOS Stream8のサポート終了を期にCentOS Stream9にバージョンアップしてみました。
そうしたらバージョンアップ後にOSからメモリが200MBも減っているじゃないですか。VPS 1GBコースで2割も持っていかれるのは勿体ないので対処法を探します。

この段差はなんだ?

バージョンアップ後にMuninでリソースを確認していたら、最大メモリが200MB程度減っていることに気づきました。天使の取り分としては大きすぎる・・・

freeで確認するとtotalが767MiB(800MB)になっているので、Muninの誤検知ではなく、確かにOSから認識しているメモリが減っていることになります。

# free -h
               total        used        free      shared  buff/cache   available
Mem:           767Mi       392Mi       231Mi        25Mi       289Mi       375Mi
Swap:          4.0Gi          0B       4.0Gi

そこでネットを調べてみると、最大メモリが減るのはRHEL9&クローン系の正しい挙動とのこと。メモリが1GB以上ある場合crashkernel(メモリダンプ)用に200MB以上確保されるようです。

ということでdmesegのログを見るとOSからはメモリが1048160KB(約1GB)されていますが、一方で294200KB(約290MB)も予約(reserved)されていることがわかります。

# dmesg | grep Memory:
[    0.020822] Memory: 260860K/1048160K available (16384K kernel code, 5672K rwdata, 12872K rodata, 3972K init, 5700K bss, 294200K reserved, 0K cma-reserved)

そしてdmesegをcrashkernelで検索すると、メモリ1GBの場合は192MBが専用に割り当てられているようです。

# dmesg | grep crashkernel
[    0.000000] Command line: BOOT_IMAGE=(hd0,gpt2)/vmlinuz-5.14.0-479.el9.x86_64 root=UUID=680c1d43-bf5b-4656-b88d-1d6b4455cfe8 ro console=ttyS0,115200 console=tty0 consoleblank=0 quiet crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M
[    0.010269] Reserving 192MB of memory at 640MB for crashkernel (System RAM: 1023MB)
[    0.017544] Kernel command line: BOOT_IMAGE=(hd0,gpt2)/vmlinuz-5.14.0-479.el9.x86_64 root=UUID=680c1d43-bf5b-4656-b88d-1d6b4455cfe8 ro console=ttyS0,115200 console=tty0 consoleblank=0 quiet crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M

crashkernelを0にしたいが/etc/default/grubを変更しても変化なし

そして/etc/default/grubのGRUB_CMDLINE_LINUX行にあるcrashkernel値を変更すると良いという記事を見つけたのですが、CentOS Stream8からバージョンアップしたからなのか、このサーバにはcrashkernelの記載がありません。

# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="console=ttyS0,115200 console=tty0 consoleblank=0 quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

試しにGRUB_CMDLINE_LINUX行にcrashkernel=0を加えてrobootしてみましたが効果はありませんでした。

# vi /etc/default/grub- GRUB_CMDLINE_LINUX="console=ttyS0,115200 console=tty0 consoleblank=0 quiet"
+ GRUB_CMDLINE_LINUX="console=ttyS0,115200 console=tty0 consoleblank=0 quiet crashkernel=0"

grubbyコマンドでcrashkernelを設定するらしい

そして公式ナレッジを読み進めていくと、ブートローダー設定はgrubbyコマンドで更新しなさいとのこと。

13.2. RHEL 9 での kdump メモリー使用量の設定
https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/managing_monitoring_and_updating_the_kernel/configuring-kdump-memory-usage-on-rhel-9_configuring-kdump-on-the-command-line

crashkernelは細かな設定をできるようですがズバッと削減したいので今回はcrashkernel=0を設定し、反映させるためにOSをrebootします。

# grubby --update-kernel ALL --args "crashkernel=0"

# shutdown -r now

reboot後にfreeを見るとtotalがしっかり192MiB増えています。dmesgからも”Reserving 192MB of memory at 640MB for crashkernel”の行が消えています。

# free -h
               total        used        free      shared  buff/cache   available
Mem:           959Mi       370Mi       509Mi        27Mi       244Mi       589Mi
Swap:          4.0Gi          0B       4.0Gi

# dmesg | grep Memory:
[    0.018701] Memory: 260860K/1048160K available (16384K kernel code, 5672K rwdata, 12872K rodata, 3972K init, 5700K bss, 97588K reserved, 0K cma-reserved)

# dmesg | grep crashkernel
[    0.000000] Command line: BOOT_IMAGE=(hd0,gpt2)/vmlinuz-5.14.0-479.el9.x86_64 root=UUID=680c1d43-bf5b-4656-b88d-1d6b4455cfe8 ro console=ttyS0,115200 console=tty0 consoleblank=0 quiet crashkernel=0
[    0.016950] Kernel command line: BOOT_IMAGE=(hd0,gpt2)/vmlinuz-5.14.0-479.el9.x86_64 root=UUID=680c1d43-bf5b-4656-b88d-1d6b4455cfe8 ro console=ttyS0,115200 console=tty0 consoleblank=0 quiet crashkernel=0

1GBから192MBもとられるのは痛いです(2回目

muninでもメモリ量が回復していることを確認しました。

それにしても1GBから192MBもcrashkernelにとられるのは厳しいと思います。CentOS8の時点でメモリ1.5GB以上を推奨してたような気がするので、せめて2GB以上からにして欲しかった。

※追記 カーネルアップデート後に再起動したら元に戻ったので暫定対処

grubby –update-kernel ALL….はインストールされているカーネルのパラメータを変更するコマンドなので、その後にインストールされたカーネルには影響しないんですね。
暫定対処として再起動タスクの直前にgrubbyコマンドを仕掛けることにしました。

/etc/cron.d/restart
51 5 1 * *  root /usr/sbin/grubby --update-kernel ALL --args "crashkernel=0" && /sbin/shutdown -r now

正攻法があるはずなのでもっと勉強しなくては!

スポンサーリンク