/var/log/messages
및 에서 볼 수 있듯이 코어를 자주 덤프하는 사용자 지정 데몬이 있는 SLES 12.4 VM을 사용하고 있습니다 coredumpctl
. 하지만 /var/lib/systemd/coredump/
다른 곳에서는 코어 파일을 본 적이 없습니다 . 오류가 표시됩니다 /var/log/messages
.
systemd-coredump[<PID>]: Failed to parse resource limit: <daemon_name>
코어 크기 제한을 unlimited 로 설정했습니다 /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
코어 덤프 파일을 저장할지 자를지(즉, 설정을 존중 ulimit -c
) 결정하기 위해 systemd-coredump에 전달하기 위한 지원을 도입한 변경 사항에서 이를 확인할 수 있습니다.
이 변경을 위해서는 kernel.core_pattern
sysctl의 명령줄을 변경해야 하지만 해당 파일의 이전 버전이 시스템에 존재하는 것으로 보입니다.
이는 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
이를 업스트림 트리의 트리와 비교한 결과, 귀하가 겪고 있는 문제는 이러한 불일치로 인한 것일 가능성이 높다는 결론에 빠르게 도달했습니다.