RHEL10.0でのコアダンプの設定の確認と出力テストの実施

Linux

RHEL10.0でのコアダンプの仕様を確認しました。

結論から述べると、RHEL10.0ではコアダンプがデフォルトで出力されるよう設定されています。

RHEL10.0で/etc/systemd/system.confファイルの記載内容を確認する

以下のコマンドを実行してRHEL10.0のコアダンプの設定を確認します。

# cat /etc/systemd/system.conf

実際に実行してみます。

[root@RHEL100 ~]# cat /etc/systemd/system.conf
cat: /etc/systemd/system.conf: そのようなファイルやディレクトリはありません

RHEL10.0インストール時点では当ファイルは存在しないようです。

/etc/systemd/system.confのデフォルトのパラメータは/usr/lib/systemd/system.confファイルで確認する

findコマンドでsystem.confファイルが別のディレクトリに保存されていないかを探してみます。

[root@RHEL100 ~]# cd /
[root@RHEL100 /]#
[root@RHEL100 /]#
[root@RHEL100 /]# find ./ -name system.conf
find: ‘./run/user/42/doc’: 許可がありません
./etc/dbus-1/system.conf
./usr/lib/systemd/system.conf
./usr/share/dbus-1/system.conf
[root@RHEL100 /]#

findコマンドで見つけた「/usr/lib/systemd/system.conf」ファイルの中身を確認してみます。

[root@RHEL100 /]# cat /usr/lib/systemd/system.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it under the
#  terms of the GNU Lesser General Public License as published by the Free
#  Software Foundation; either version 2.1 of the License, or (at your option)
#  any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file (or a copy of it placed in
# /etc/ if the original file is shipped in /usr/), or by creating "drop-ins" in
# /etc/systemd/system.conf.d/ directory. The latter is generally recommended.
# Defaults can be restored by simply deleting the main configuration file and
# all drop-ins located in /etc/.
#
# Use 'systemd-analyze cat-config systemd/system.conf' to display the full config.
#
# See systemd-system.conf(5) for details.

[Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#LogTime=no
#DumpCore=yes
#ShowStatus=yes
#CrashChangeVT=no
#CrashShell=no
#CrashAction=freeze
#CtrlAltDelBurstAction=reboot-force
#CPUAffinity=
#NUMAPolicy=default
#NUMAMask=
#RuntimeWatchdogSec=off
#RuntimeWatchdogPreSec=off
#RuntimeWatchdogPreGovernor=
#RebootWatchdogSec=10min
#KExecWatchdogSec=off
#WatchdogDevice=
#CapabilityBoundingSet=
#NoNewPrivileges=no
#ProtectSystem=auto
#SystemCallArchitectures=
#TimerSlackNSec=
#StatusUnitFormat=combined
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=journal
#DefaultStandardError=inherit
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
#DefaultTimeoutAbortSec=
#DefaultDeviceTimeoutSec=90s
#DefaultRestartSec=100ms
#DefaultStartLimitIntervalSec=10s
#DefaultStartLimitBurst=5
#DefaultEnvironment=
#DefaultCPUAccounting=yes
#DefaultIOAccounting=no
#DefaultIPAccounting=no
#DefaultMemoryAccounting=yes
#DefaultTasksAccounting=yes
#DefaultTasksMax=80%
#DefaultLimitCPU=
#DefaultLimitFSIZE=
#DefaultLimitDATA=
#DefaultLimitSTACK=
#DefaultLimitCORE=
#DefaultLimitRSS=
#DefaultLimitNOFILE=1024:524288
#DefaultLimitAS=
#DefaultLimitNPROC=
#DefaultLimitMEMLOCK=8M
#DefaultLimitLOCKS=
#DefaultLimitSIGPENDING=
#DefaultLimitMSGQUEUE=
#DefaultLimitNICE=
#DefaultLimitRTPRIO=
#DefaultLimitRTTIME=
#DefaultMemoryPressureThresholdSec=200ms
#DefaultMemoryPressureWatch=auto
#DefaultOOMPolicy=stop
#DefaultSmackProcessLabel=
#ReloadLimitIntervalSec=
#ReloadLimitBurst=

ファイルの上部に英語で注意書きがあります。Google翻訳で日本語に翻訳してみました。

# このファイルは systemd の一部です。
#
# systemd はフリーソフトウェアです。Free Software Foundation が発行する GNU Lesser General Public License の条項に従って、再配布および/または改変することができます。
# ライセンスのバージョンは 2.1 ですが、(必要に応じて)
# それ以降のバージョンでも構いません。
#
# このファイル内のエントリは、コンパイル時のデフォルト設定を示しています。ローカル設定は、
# このファイルを変更するか (または、元のファイルが /usr/ に同梱されている場合は、/etc/ にコピーするか)、
# /etc/systemd/system.conf.d/ ディレクトリに「ドロップイン」を作成することによって作成する必要があります。通常は後者が推奨されます。
# デフォルト設定は、メインの設定ファイルと、/etc/ にあるすべてのドロップインを削除するだけで復元できます。
#
# 完全な設定を表示するには、「systemd-analyze cat-config systemd/system.conf」を使用します。
#
# 詳細は systemd-system.conf(5) を参照してください。

/etc/にコピーするか、/etc/systemd/system.conf.d/ ディレクトリに「ドロップイン」を作成する必要があります、とのこと。/usr配下にあるsystem.confがデフォルトの設定を書いたファイルで、/etc/ディレクトリ配下にこのファイルをコピーしたものでデフォルトから設定を変更したものを配置して使うようです。

ulimit -c コマンドを実行する

ulimit -cコマンドを実行して出力されるCoreDumpの容量に制限がないことを確認します。

[root@RHEL100 ~]# ulimit -c
unlimited
[root@RHEL100 ~]#

特に容量制限はないようです。

ulimit -cで確認できるパラメータはsystem.confファイルの以下のパラメータに設定されている内容です。

DefaultLimitCORE

/usr/lib/systemd/system.confファイルには以下のように記載されています。

[root@RHEL100 ~]#  cat /usr/lib/systemd/system.conf | grep DefaultLimitCORE
#DefaultLimitCORE=
[root@RHEL100 ~]#

RHEL10.0ではデフォルトでコアダンプが有効化されていることを確認する

system.confに以下のパラメータが設定されていて、コアダンプの出力が有効化されていることを確認します。

DumpCore=yes

以下のコマンドをRHEL10.0で実行してみました。コアダンプの出力が有効化されています。

[root@RHEL100 ~]#  cat /usr/lib/systemd/system.conf | grep Core
#DumpCore=yes
[root@RHEL100 ~]#

coredump.confファイルの設定値と保存先

system.confファイルと同様に、RHEL10.0ではデフォルトで/etc/配下のディレクトリにcoredump.confファイルが存在しません。

[root@RHEL100 ~]# cat /etc/systemd/coredump.conf
cat: /etc/systemd/coredump.conf: そのようなファイルやディレクトリはありません
[root@RHEL100 ~]#

findコマンドで別の場所に保存されているcoredump.confファイルを探します。

[root@RHEL100 ~]# cd /
[root@RHEL100 /]#
[root@RHEL100 /]# find ./ -name coredump.conf
find: ‘./run/user/42/doc’: 許可がありません
./usr/lib/systemd/coredump.conf
[root@RHEL100 /]#

/usr/lib/systemd/coredump.confファイルがデフォルトの設定が記載されたcoredump.confファイルです。

catコマンドで中身を確認してみます。

[root@RHEL100 ~]# cat /usr/lib/systemd/coredump.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it under the
#  terms of the GNU Lesser General Public License as published by the Free
#  Software Foundation; either version 2.1 of the License, or (at your option)
#  any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file (or a copy of it placed in
# /etc/ if the original file is shipped in /usr/), or by creating "drop-ins" in
# the /etc/systemd/coredump.conf.d/ directory. The latter is generally
# recommended. Defaults can be restored by simply deleting the main
# configuration file and all drop-ins located in /etc/.
#
# Use 'systemd-analyze cat-config systemd/coredump.conf' to display the full config.
#
# See coredump.conf(5) for details.

[Coredump]
#Storage=external
#Compress=yes
ProcessSizeMax=1G
ExternalSizeMax=1G
#JournalSizeMax=767M
#MaxUse=
#KeepFree=
#EnterNamespace=no
[root@RHEL100 ~]#

ファイルの冒頭に英文で説明があります。Google翻訳で内容を翻訳してみます。

# このファイルは systemd の一部です。
#
# systemd はフリーソフトウェアです。
# Free Software Foundation が発行する GNU Lesser General Public License の条項に従って、再配布および/または改変することができます。
# ライセンスのバージョンは 2.1 ですが、(必要に応じて)
# それ以降のバージョンでも構いません。
#
# このファイル内のエントリは、コンパイル時のデフォルト設定を示しています。ローカル設定は、
# このファイルを変更するか (または、元のファイルが /usr/ に配布されている場合は、/etc/ にコピーするか)、
# /etc/systemd/coredump.conf.d/ ディレクトリに「ドロップイン」を作成することによって作成する必要があります。通常は後者が推奨されます。
# デフォルト設定は、/etc/ にあるメインの設定ファイルとすべてのドロップインを削除するだけで復元できます。
#
# 完全な設定を表示するには、「systemd-analyze cat-config systemd/coredump.conf」を使用します。
#
# 詳細は coredump.conf(5) を参照してください。

system.confファイル同様に、/usrディレクトリ配下にあるcoredump.confがデフォルトのパラメータが記載されたファイルで、パラメータをカスタマイズして使用するには/etc/配下の/systemd/ディレクトリにファイルをコピーし、パラメータをカスタマイズしたファイルを/etc/systemd保存する必要があります。

RHEL10.0でのコアダンプの出力制限は1GB

以下のパラメータがRHEL10.0のデフォルトのコアダンプ出力設定として設定されています(/usr/lib/systemd/coredump.conf)。

[root@RHEL100 ~]# cat /usr/lib/systemd/coredump.conf
(中略)
ProcessSizeMax=1G
ExternalSizeMax=1G
(以下略)

ProcessSizeMaxパラメータは、RHELが処理可能なコアダンプファイルの最大容量です。

ExternalSizeMaxパラメータは、出力して保存されるコアダンプファイルの最大容量です。

コアダンプが出力される容量の確認方法

以下のコマンドを<実行中のプロセスID>を対象のプロセスIDに変更して実行するとコアダンプが出力される容量を確認できます。

# pmap <実行中のプロセスID>|egrep '[ (anon|stack|shmid)'|awk 'BEGIN{sum=0}

実行例は以下です。

[root@RHEL100 ~]# sleep 3600 &
[1] 4021
[root@RHEL100 ~]# pmap 4021|egrep '[ (anon|stack|shmid)'|awk 'BEGIN{sum=0}{sum=sum+$2;}END{print sum;}'
344
[root@RHEL100 ~]#

この場合は344KBだと予測されます。実際にkill -11コマンドを実行してコアダンプを出力してみます。23.1KBでした。

[root@RHEL100 ~]# kill -11 4021
[root@RHEL100 ~]#
[1]+  Segmentation fault      (コアダンプ) sleep 3600
[root@RHEL100 ~]#
[root@RHEL100 ~]# coredumpctl list
TIME                         PID UID GID SIG     COREFILE EXE             SIZE
Thu 2025-11-27 17:34:25 JST 4021   0   0 SIGSEGV present  /usr/bin/sleep 23.1K
[root@RHEL100 ~]#
[root@RHEL100 ~]#

かなり予測値と実測値に差分がありますが、この予測方法は以下Red Hat公式ドキュメントを参照して行っています。

匿名メモリ領域のサイズを合計すると、大まかなコアダンプのサイズが得られます。コアダンプ ファイルはヘッダーとメタデータのためにより多くのサイズを消費しますが、通常は 1 MB 未満になります。
Red Hat Customer Portal
Access Red Hat’s knowledge, guidance, and support through your subscription.

コアダンプが出力されるメモリ領域

コアダンプが出力されるメモリの領域は/proc/PID/coredump_filterファイルで確認できます。

コアダンプに保存されるメモリ領域は、/proc/PID/coredump_filter 。

Red Hat Customer Portal
Access Red Hat’s knowledge, guidance, and support through your subscription.

例えば、sleep 3600 &コマンドを実行してみた際の/proc/PID/coredump_filterファイルの中身を確認してみます。

[root@RHEL100 ~]# sleep 3600 &
[1] 3976
[root@RHEL100 ~]#

PIDは毎度プロセス実行ごとに異なりますが、今回は3976が割り当てられました。

/proc/3976/coredump_filterファイルの中身を確認します。

[root@RHEL100 ~]# cat /proc/3976/coredump_filter
00000033

0x33を意味します。以下の4種類の領域がデフォルトで含まれます。

bit 0 Dump anonymous private mappings.
bit 1 Dump anonymous shared mappings.
bit 4 (since Linux 2.6.24)
Dump ELF headers.
bit 5 (since Linux 2.6.28)

からman 5 core:
The value in the file is a bit mask of memory mapping types (see mmap(2)). If a bit is set in the mask,
then memory mappings of the corresponding type are dumped; otherwise they are not dumped. The bits in
this file have the following meanings:

       bit 0  Dump anonymous private mappings.
       bit 1  Dump anonymous shared mappings.
       bit 2  Dump file-backed private mappings.
       bit 3  Dump file-backed shared mappings.
       bit 4 (since Linux 2.6.24)
              Dump ELF headers.
       bit 5 (since Linux 2.6.28)
              Dump private huge pages.
       bit 6 (since Linux 2.6.28)
              Dump shared huge pages.
       bit 7 (since Linux 4.4)
              Dump private DAX pages.
       bit 8 (since Linux 4.4)
              Dump shared DAX pages.

デフォルト値coredump_filter00000033 (ビット 0、1、4、5 が設定されています)。

Red Hat Customer Portal
Access Red Hat’s knowledge, guidance, and support through your subscription.

コアダンプの保存先と保存期間

出力されたコアダンプは何もしないと削除されるようにデフォルトで設定されています。

RHEL10.0のコアダンプの保存先

RHEL10.0ではコアダンプの保存先は以下です。

/var/lib/systemd/coredump

コアダンプの保存先は、RHEL8,9では変更できなかったため、RHEL10でも保存先は変更できないものと思われます。

Red Hat Customer Portal
Access Red Hat’s knowledge, guidance, and support through your subscription.

コアダンプの保存先を変更するには、コアダンプが保存される場所をコアダンプの保存先をバインドマウントする必要があります(上記のデフォルトの保存先とマウント先のディレクトリの二か所にコアダンプが生成される状態になる)。

RHEL10.0のコアダンプの保存期間はデフォルトで2週間

RHEL10.0のコアダンプの保存期間はデフォルトで2週間に設定されています。コアダンプが出力された後何もせず放っておくと出力されたコアダンプは削除されます。

[root@RHEL100 ~]# cat /usr/lib/tmpfiles.d/systemd.conf
(中略)
d /var/lib/systemd/coredump 0755 root root 2w
(以下略)

出力されるコアダンプの名前

出力されるコアダンプの名前はカーネルパラメータで制御します。

[root@RHEL100 ~]# sysctl -a | grep kernel.core_pattern
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h

コアダンプの出力テスト

以下のコマンドを実行してコアダンプの出力をテストします。

# sleep 3600 &
# kill -11 <sleep 3600 &コマンド実行時に表示されたプロセスID>

実際に実行してみます。

[root@RHEL100 ~]# sleep 3600 &
[1] 3933
[root@RHEL100 ~]# kill -11 3933
[root@RHEL100 ~]#
[1]+  Segmentation fault      (コアダンプ) sleep 3600
[root@RHEL100 ~]#
[root@RHEL100 ~]# coredumpctl
TIME                         PID UID GID SIG     COREFILE EXE            SIZE
Thu 2025-11-27 17:15:57 JST 3933   0   0 SIGSEGV present  /usr/bin/sleep  23K
[root@RHEL100 ~]#

コアダンプが出力されました。

tail コマンドでログも確認してみます。

[root@RHEL100 ~]# tail -n 20 /var/log/messages
(中略)
Nov 27 17:15:57 RHEL100 systemd-coredump[3937]: Process 3933 (sleep) of user 0 terminated abnormally with signal 11/SEGV, processing...
Nov 27 17:15:57 RHEL100 systemd[1]: Created slice system-systemd\x2dcoredump.slice - Slice /system/systemd-coredump.
Nov 27 17:15:57 RHEL100 systemd[1]: Started systemd-coredump@0-3937-0.service - Process Core Dump (PID 3937/UID 0).
Nov 27 17:15:57 RHEL100 systemd-coredump[3938]: Process 3933 (sleep) of user 0 dumped core.#012#012Stack trace of thread 3933:#012#0  0x00007f4197d19dc7 clock_nanosleep@GLIBC_2.2.5 (libc.so.6 + 0xcfdc7)#012#1  0x00007f4197d257a7 __nanosleep (libc.so.6 + 0xdb7a7)#012#2  0x00005561852f1aa8 n/a (n/a + 0x0)#012#3  0x0000000000000000 n/a (n/a + 0x0)#012ELF object binary architecture: AMD x86-64
Nov 27 17:15:57 RHEL100 systemd[1]: systemd-coredump@0-3937-0.service: Deactivated successfully.

出力テストで出力されたコアダンプの中身の確認

出力されたコアダンプの詳細はcoredumpctl info <プロセスID>で確認できます。

[root@RHEL100 ~]# coredumpctl info 3933
           PID: 3933 (sleep)
           UID: 0 (root)
           PID: 3933 (sleep)
           UID: 0 (root)
           GID: 0 (root)
        Signal: 11 (SEGV)
     Timestamp: Thu 2025-11-27 17:15:57 JST (4min 14s ago)
  Command Line: sleep 3600
    Executable: /usr/bin/sleep
 Control Group: /user.slice/user-0.slice/session-2.scope
          Unit: session-2.scope
         Slice: user-0.slice
       Session: 2
     Owner UID: 0 (root)
       Boot ID: 872a819f1c7349ddab02567b0dc43d9b
    Machine ID: f772f8d5fe8e4ccf932e194721961ac6
      Hostname: RHEL100
       Storage: /var/lib/systemd/coredump/core.sleep.0.872a819f1c7349ddab02567b0dc43d9b.3933.1764231357000000.zst (present)
  Size on Disk: 23K
       Message: Process 3933 (sleep) of user 0 dumped core.

                Stack trace of thread 3933:
                #0  0x00007f4197d19dc7 clock_nanosleep@GLIBC_2.2.5 (libc.so.6 + 0xcfdc7)
                #1  0x00007f4197d257a7 __nanosleep (libc.so.6 + 0xdb7a7)
                #2  0x00005561852f1aa8 n/a (n/a + 0x0)
                #3  0x0000000000000000 n/a (n/a + 0x0)
                ELF object binary architecture: AMD x86-64

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