【Linux/RHEL9】コアダンプの設定

Linux

Red Hat Enterprise Linux 9でのコアダンプの設定についてまとめました。

この記事では以下のディストリビューションを対象として作成しています。

  • Red Hat Enterprise Linux 9.0 – 9.5

なお、コアダンプの仕様はRHEL9.4までとRHEL9.5で異なり、詳細は本記事で後述しています。

本記事作成に当たってRHEL9の公式ドキュメントとRHEL9.5の公式ドキュメント(リリースノート)を参考資料にしています。

3.4. クラッシュしたアプリケーションのデバッグ | Red Hat Product Documentation
3.4. クラッシュしたアプリケーションのデバッグ | Red Hat Documentation
9.5 リリースノート | Red Hat Product Documentation
9.5 リリースノート | Red Hat Documentation

コアダンプとは

冒頭の参考で記載したRHEL9.5のドキュメントにコアダンプの説明が以下のようにあります。

コアダンプは、アプリケーションの動作が停止した時点のアプリケーションのメモリーの一部のコピーで、ELF 形式で保存されます。コアダンプには、アプリケーションの内部変数、スタックすべてが含まれ、アプリケーションの最終的な状態を検査することができます。それぞれの実行可能ファイルおよびデバッグ情報を追加すると、実行中のプログラムを分析するのと同様に、デバッガーでコアダンプファイルを分析できます。

コアダンプをひとことでまとめると、「アプリケーションがクラッシュしたときに出力される、アプリケーションのクラッシュに関する情報をまとめたファイル(ダンプファイル)」です。

RHEL9.0-9.4までは作業を行わないとコアダンプが出力されない

RHEL9.0-9.4までは/etc/systemd/system.confの以下のパラメータを変更しなければダンプファイルが出力されて保存されません。

# cat /etc/systemd/system.conf | grep DefaultLimitCORE
DefaultLimitCORE=0:infinity

上記のパラメータを以下に変更する必要があります。

DefaultLimitCORE=infinity

本パラメータは以下のような構成になっています。0:を削除することでソフトウェアでのダンプ出力制限を解除(infinityに)します。

DefaultLimitCORE=ソフトウェアでのダンプ出力制限:ハードウェアでのダンプ出力制限

RHEL9の公式ドキュメントの手順を引用します。

手順

コアダンプを有効にするには、/etc/systemd/system.conf ファイルに以下の行が含まれていることを確認します。

DumpCore=yes
DefaultLimitCORE=infinity
これらの設定が以前に存在したかどうか、以前の値が何であったかを説明するコメントを追加することもできます。これにより、必要に応じて、この変更を後で元に戻すことができます。コメントは、# 文字で始まる行です。

ファイルを変更するには、管理者レベルのアクセスが必要です。

新しい設定を適用します。

# systemctl daemon-reexec
コアダンプサイズの制限を削除します。

# ulimit -c unlimited
この変更を元に戻すには、unlimited ではなく、0 を指定してコマンドを実行します。

システム情報を収集する sosreport ユーティリティーを提供する sos パッケージをインストールします。

# dnf install sos
アプリケーションがクラッシュすると、コアダンプが生成され、systemd-coredump により処理されます。
SOS レポートを作成して、システムに関する追加情報を提供します。

# sosreport
これにより、設定ファイルのコピーなど、システムに関する情報が含まれる .tar アーカイブが作成されます。

コアダンプを探してエクスポートします。

$ coredumpctl list executable-name
$ coredumpctl dump executable-name > /path/to/file-for-export
アプリケーションが複数回クラッシュした場合、最初のコマンドの出力には、取得されたコアダンプがさらにリスト表示されます。その場合、2 番目のコマンドに対して、他の情報を使用してより正確なクエリーを作成します。詳細は、man ページ coredumpctl(1) を参照してください。

デバッグを行うコンピューターに、コアダンプと SOS レポートを移動します。既知の場合は、実行ファイルも転送します。

重要
実行可能ファイルが不明な場合は、コアファイルのその後の分析で特定します。

必要に応じて、コアダンプと SOS レポートに移動後に削除して、ディスク領域を解放します。
3.4. クラッシュしたアプリケーションのデバッグ | Red Hat Product Documentation
3.4. クラッシュしたアプリケーションのデバッグ | Red Hat Documentation

コアダンプが出力され、保存されるファイルの容量制限

/etc/systemd/coredump.confの以下のパラメータに記載されている容量までのコアダンプしか出力と保存がされません。RHEL9.0-9.4ではこの値がデフォルトで2GBに設定されています。

# cat /etc/systemd/coredump.conf
#ProcessSizeMax=2G
#ExternalSizeMax=2G

コアダンプの保存先とファイル名

コアダンプは以下のカーネルパラメータで指定されている場所に保存されます。以下のカーネルパラメータで出力されるファイルの名前も設定が可能です。

# sysctl -a | grep kernel.core_pattern
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h

RHEL9.5から仕様が異なる

9.5 リリースノート | Red Hat Product Documentation
9.5 リリースノート | Red Hat Documentation

RHEL9.5から/etc/systemd/system.confのパラメータが以下の通り異なります。

DefaultLimitCore systemd 設定オプションのデフォルト値が、unlimited:unlimited に設定されるようになる

この影響により、先ほど紹介した手順を行わなくとも、あらかじめコアダンプが出力され、保存されるようRHEL9.5では設計されています。

また、/etc/systemd/coredump.confの以下のパラメータがデフォルトで1GBに設定されます。

ProcessSizeMax=1G
ExternalSizeMax=1G

RHEL9.0-9.4では上記パラメータは以下のようになっています。

#ProcessSizeMax=2G
#ExternalSizeMax=2G

RHEL9.5ではコアダンプの保存期間が3日から14日へ変更されました。

systemd-coredump によって保存されたクラッシュダンプは、使用されない場合は 14 日後に削除されます。

ざっくりと、RHEL9.5ではRHEL9.0-9.4までと以下の点でコアダンプの仕様が異なります。

  • コアダンプファイルがデフォルトで出力される
  • 出力され、保存されるコアダンプファイルの容量はデフォルトで1GBに設定される
  • 出力され、保存されたコアダンプファイルの保存期間は14日へ変更された

RHEL9.5からはデフォルトでCoreDumpが出力される

RHEL9.0-9.4では/etc/systemd/system.confの以下のパラメータが設定されていました。

DefaultLimitCORE=0:infinity

RHEL9.5では以下のようにパラメータが変更されます。

#DefaultLimitCORE=

この変更によって、RHEL9.5ではデフォルトでコアダンプが出力され、保存されます。

0:infinityの0はソフトウェアでのダンプファイル出力制限で、infinityはハードウェアでの出力制限を設定します。

出力され、保存されるコアダンプファイルの容量制限が1GBに

RHEL9.5では/etc/systemd/coredump.confの以下のパラメータがデフォルトで1GBに設定されています。

ProcessSizeMax=1G
ExternalSizeMax=1G

RHEL9.0-9.4では以下のパラメータが設定されていました。コメントアウトされているパラメータはデフォルトで適用されるパラメータです。

#ProcessSizeMax=2G
#ExternalSizeMax=2G

RHEL9.5ではコアダンプファイルの保存期間が3日から2週間(14日)へ変更された

RHEL9.5で以下のように3dが2wへ変更されました。この変更により、コアダンプファイルにアクセスしなかったらコアダンプファイが削除される期間が3日から2週間(14日)へ変更されています。

[root@localhost ~]# cat /usr/lib/tmpfiles.d/systemd.conf
d /var/lib/systemd/coredump 0755 root root 2w

タイトルとURLをコピーしました