【Linux operation 31】SUSE 12 - systemd-coredump

1、概述

• systemd-coredump收集并显示内核核心转储,用于分析应用程序崩溃。当一个进程崩溃(或属于一个应用程序的所有进程)时,它的默认设置是将核心转储记录到systemd日志中,如果可能的话包括回溯,并将核心转储存储在 /var/lib/systemd/coredump.

• 还可以选择使用其他工具检查转储文件,例如gdb或 crash,

• 有一个选项不存储核心转储,而只记录到日志中,这可能有助于最大限度地减少敏感信息的收集和存储。

2、配置

systemd-coredump默认情况下已启用并准备好运行。默认配置在/etc/systemd/coredump.conf:

[Coredump]
#Storage=external
#Compress=yes
#ProcessSizeMax=2G
#ExternalSizeMax=2G
#JournalSizeMax=767M
#MaxUse=
#KeepFree=

下面的例子展示了如何使用 Vim 进行简单的测试,通过创建一个段错误来生成日志条目和一个核心转储。

2.1 使用 VIM 创建核心转储

<1> 启用debuginfo-pool和 debuginfo-update存储库

<2> 安装vim 调试信息

<3> 启动vim testfile并输入几个字符

<4> 获取 PID 并生成段错误:

ps ax | grep vim
2345 pts/3    S+     0:00 vim testfile               
                 
kill -s SIGSEGV 2345

Vim 会发出错误信息:

Vim: Caught deadly signal SEGV
Vim: Finished.
Segmentation fault (core dumped)

<5> 列出您的核心转储,然后检查它们:

# coredumpctl
TIME                        PID  UID  GID SIG PRESENT EXE
Wed 2022-05-26 11:56:47 PST 2345 1000 100 11  *       /bin/vim

# coredumpctl info
PID: 2345 (vim)
UID: 0 (root)
GID: 0 (root)
Signal: 11 (SEGV)
Timestamp: Wed 2019-11-12 11:58:05 PST
Command Line: vim testfile
Executable: /bin/vim
Control Group: /user.slice/user-1000.slice/session-1.scope
    Unit: session-1.scope
    Slice: user-1000.slice
    Session: 1
    Owner UID: 1000 (tux)
    Boot ID: b5c251b86ab34674a2222cef102c0c88
    Machine ID: b43c44a64696799b985cafd95dc1b698
    Hostname: linux-uoch
    Coredump: /var/lib/systemd/coredump/core.vim.0.b5c251b86ab34674a2222cef102
    Message: Process 2345 (vim) of user 0 dumped core.
                
         Stack trace of thread 2345:
         #0  0x00007f21dd87e2a7 kill (libc.so.6)
         #1  0x000000000050cb35 may_core_dump (vim)
         #2  0x00007f21ddbfec70 __restore_rt (libpthread.so.0)
         #3  0x00007f21dd92ea33 __select (libc.so.6)
         #4  0x000000000050b4e3 RealWaitForChar (vim)
         #5  0x000000000050b86b mch_inchar (vim)
[...]

当有多个核心转储时,coredumpctl info 命令显示所有这些转储;
Filter them by PID, COMM (command), or EXE (full path to the executable),

for example, all core dumps for Vim:

#coredumpctl info /bin/vim

See a single core dump by PID:

#coredumpctl info 2345

Output the selected core to gdb:

coredumpctl gdb 2345

列中的星号PRESENT表示存在存储的核心转储。如果该字段为空,则没有存储核心转储,并coredumpctl从日志中检索崩溃信息。

/etc/systemd/coredump.conf您可以使用以下 Storage选项 控制此行为 :

  • Storage=none— 核心转储记录在日志中,但不存储。这有助于最大程度地减少敏感信息的收集和存储,例如通用数据保护条例 (GDPR) 合规性。

  • Storage=external—核心存储在 /var/lib/systemd/coredump

  • Storage=journal— 核心存储在systemd 日志 中

每个核心转储都会调用一个新的实例systemd-coredump,因此配置更改将应用​​到下一个核心转储,并且无需重新启动任何服务。

系统重新启动后不会保留核心转储。您可以使用 永久保存它们coredumpctl。以下示例按 过滤PID并将核心存储在 中 vim.dump:

coredumpctl -o vim.dump dump 2345

有关完整的命令和选项列表,请参阅man systemd-coredump、man coredumpctl和man coredump.conf。

猜你喜欢

转载自blog.csdn.net/qq_22938603/article/details/124983480