SLES 12.4| systemd-coredump[]: 解析资源限制失败:

SLES 12.4| systemd-coredump[]: 解析资源限制失败:

我正在使用 SLES 12.4 VM,其中有一个自定义守护进程经常转储核心,正如我从/var/log/messages和中看到的那样coredumpctl。但我从未/var/lib/systemd/coredump/在任何其他位置看到核心文件。我确实看到一个错误/var/log/messages

systemd-coredump[<PID>]: Failed to parse resource limit: <daemon_name>

我已经将核心大小限制设置为无限制/etc/security/limits.conf。我还启用了应用程序核心转储/etc/systemd/coredump.conf。但是,当我手动运行时:

[ 12.4 sles ~]# kill -SEGV <daemon PID>

我能够找到核心/var/lib/systemd/coredump

/etc/security/limits.conf:

#<domain>      <type>  <item>         <value>
#

*                soft    core            -1
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

/etc/systemd/coredump.conf:

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

/etc/sysctl.d/50-coredump.conf:

kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e

极限状态:

[12.4-sles:~]# ulimit -c
unlimited

如何获取内核启动的核心转储的核心?

答案1

看来您的内容不正确,在和字段之间/etc/sysctl.d/50-coredump.conf应该有一个附加的内容。%c%t%e

ulimit -c您可以看到,在引入了对将周围传递给 systemd-coredump 的支持来决定是保存还是截断 coredump 文件(换句话说,尊重设置ulimit -c)的更改中。

该更改需要更改kernel.core_patternsysctl 的命令行,但您的系统中似乎存在该文件的旧版本。

这可能是由于 RPM 认为需要保留原始文件(查找一个/etc/sysctl.d/50-coredump.conf.rpmnew或另一个.rpm*扩展名可能会给您线索。)

无论如何,更新该文件应该可以解决您的问题。


有关导致此问题的根源的更多信息,我查看了您报告的消息:

systemd-coredump[<PID>]: Failed to parse resource limit: <daemon_name>

然后我发现了那条消息在源代码树中,但是该代码期望收到一个可以解析为数字的 RLIMIT ,因此当您提到您在那里收到该消息时<daemon_name>,令我震惊的是您获得的字段顺序错误......

查看您的50-coredump.conf并将其与上游树中的树进行比较,很快我就得出结论:您遇到的问题很可能是由于这种不匹配造成的。

相关内容