CentOS・RHEL 8 から 1GB RAM でも kdump の crashkernel メモリ 160MB が確保される件


昨日、CentOS 7.7 から CentOS 8.1 にマイグレーションしたのですが、想定以上にメモリの使用率が高かったので確認しました。

ConoHa の 1GB プランで動作しているのですが、合計メモリの認識に差異があるようです。

状況の確認

調査を進めたところ、カーネルクラッシュダンプをキャプチャーする kdump が有効になっていて、その分システムメモリが減少していることを確認しました。

CentOS 7.7 – 1GB

以前の環境は、いろいろチューニングしていた可能性があったので、念のため新規のVMで確認しました。

CentOS 7 1GB RAM kdump failed

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

CentOS 8.1 – 1GB

CentOS 8 1GB RAM kdump active

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

CentOS 8.1 – 512MB

CentOS 8 512MB RAM kdump failed

もしやと思って確認しましたが、CentOS 8 でも 512MB メモリの場合は kdump は無効でした。

仕様の確認

私の認識としては、数GB以上のメモリがないと crashkernel=auto によりメモリが予約されず、kdump も動作しない認識でした。

RHEL のドキュメントを確認してみます。

どちらも 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 というのは大きな違いだと思うので頭に入れておいた方がよい情報だと思いました。


Comments

comments

コメントを残す

メールアドレスが公開されることはありません。

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)