昨日、CentOS 7.7 から CentOS 8.1 にマイグレーションしたのですが、想定以上にメモリの使用率が高かったので確認しました。
ConoHa の 1GB プランで動作しているのですが、合計メモリの認識に差異があるようです。
状況の確認
調査を進めたところ、カーネルクラッシュダンプをキャプチャーする kdump が有効になっていて、その分システムメモリが減少していることを確認しました。
CentOS 7.7 – 1GB
以前の環境は、いろいろチューニングしていた可能性があったので、念のため新規のVMで確認しました。

CentOS 7 で 1GB メモリの場合、kdump は無効であることを確認できました。
CentOS 8.1 – 1GB

こちらも、念のため新規の VM で確認しましたが、CentOS 8 の場合、1GB メモリでも kdump が有効であり、その分 OS 上のメモリ総容量が160MB以上減っていることが確認できました。
CentOS 8.1 – 512MB

もしやと思って確認しましたが、CentOS 8 でも 512MB メモリの場合は kdump は無効でした。
仕様の確認
私の認識としては、数GB以上のメモリがないと crashkernel=auto によりメモリが予約されず、kdump も動作しない認識でした。
RHEL のドキュメントを確認してみます。
- 第14章 サポートしている kdump の設定とダンプ出力先 Red Hat Enterprise Linux 8 | Red Hat Customer Portal
- 7.7. サポートしている kdump の設定とダンプ出力先 Red Hat Enterprise Linux 7 | Red Hat Customer Portal
どちらも crashkernel=auto の「自動メモリー予約に必要な最小メモリーサイズ」は 2GB なので、1GB の場合確保されないように読み取れます。
ただ、「kdump 用に必要な最小予約メモリー」については、
- RHEL7:使用可能なメモリー 2GB以上(以下略)
- RHEL8:使用可能なメモリー 1GB から 64GB→160 MB のメモリー(以下略)
となっており、8からは 1GB 以上から使用可能になったようです。
kdump・crashkernel の無効化
クラッシュ時の原因究明には必要な情報とは理解しつつも、メモリが少ない環境なので、メモリ不足によるクラッシュの方が可能性が大きいと考え、今回は無効化します。
まずは /boot/grub2/grub.cfg の crashkernel=auto の部分を削除します。
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet net.ifnames=0 console=tty0 console=ttyS0,115200n8r"
↓
GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0 console=tty0 console=ttyS0,115200n8r"
そして、grub2-mkconfig -o /boot/grub2/grub.cfg コマンドにて更新、サーバーを再起動します。
# free -m
total used free shared buff/cache available
Mem: 981 662 75 26 242 152
Swap: 2047 21 2026
# systemctl status kdump
● kdump.service - Crash recovery kernel arming
Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2020-05-10 19:11:18 JST; 1min 11s ago
Process: 1338 ExecStart=/usr/bin/kdumpctl start (code=exited, status=1/FAILURE)
Main PID: 1338 (code=exited, status=1/FAILURE)
May 10 19:11:18 systemd[1]: Starting Crash recovery kernel arming...
May 10 19:11:18 kdumpctl[1338]: No memory reserved for crash kernel
May 10 19:11:18 kdumpctl[1338]: Starting kdump: [FAILED]
May 10 19:11:18 systemd[1]: kdump.service: Main process exited, code=exited, status=1/FAILURE
May 10 19:11:18 systemd[1]: kdump.service: Failed with result 'exit-code'.
May 10 19:11:18 systemd[1]: Failed to start Crash recovery kernel arming.
無事、メモリが160MB増加し、kdump も動作しないことを確認しました。
気になるようなら systemctl disable kdump を実行しても良いかと思います。
運用後、クラッシュが発生するようなら、設定を戻したいと思います。
まとめ
CentOS 8 ではメモリ 1GB でも kdump が有効化されるようになりました。
インターネット上でこれに言及している情報が見つけられませんでしたが、メモリ 1GB でサーバーを運用されている方は、160MB というのは大きな違いだと思うので頭に入れておいた方がよい情報だと思いました。