每月一次,我发现我的一台 RedHat 9 服务器重新启动(实际上它是 AlmaLinux 9,但由于它是 RH9 的克隆,因此这个问题最好在 RH9 的环境中解决)。我试图找出导致崩溃的原因,但没有创建核心转储文件!
我已经按照这篇文章中的说明进行操作,但我的系统上似乎没有任何内容,但是当我使用以下命令触发核心转储时:
睡眠 3 并杀死 -SEGV $!
没有核心转储文件!
我确认基本设置如下:
[root@myhost ~]# cat /proc/sys/kernel/core_pattern
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
[root@myhost ~]# ulimit -c
unlimited
我必须设置其他内容才能创建转储文件吗?我怀疑是我自己的应用程序(非打包)导致了这个问题……但即使在保存应用程序的目录中也没有核心文件。
====更新====
我修改了 /etc/coredump.conf 并设置了 storage=external (其他所有内容都注释掉了),然后重新启动并运行以下命令:
[root@myhost ~]# sleep 3 & kill -SEGV $!
[1] 3583
[root@myhost ~]#
[1]+ Segmentation fault (core dumped) sleep 3
[root@myhost ~]# coredumpctl --all
TIME PID UID GID SIG COREFILE EXE SIZE
Sat 2024-10-26 12:56:46 EDT 3583 0 0 SIGSEGV none /usr/bin/bash -
[root@myhost ~]# ll /var/lib/systemd/coredump/
total 0
因此仍然没有可见的核心转储文件(请注意上面的“无”)。系统日志显示:
Oct 26 13:06:41 ngcvls1 systemd[1]: Started Process Core Dump (PID 4459/UID 0).
Oct 26 13:06:41 ngcvls1 systemd-coredump[4460]: Resource limits disable core dumping for process 4458 (bash).
Oct 26 13:06:41 ngcvls1 systemd-coredump[4460]: Process 4458 (bash) of user 0 dumped core.
因此我从命令行运行:
ulimit -c unlimited
并重复段错误测试,然后创建了一个核心文件!但重启后它就消失了。(尽管我在 coredump.conf 中设置了 storage=external)。我需要核心转储才能在重启后继续存在,否则我就不知道我的系统崩溃的原因了。越来越近了!我想让 ulimit -c 永久存在,只是不知道把它放在哪里(不喜欢其他帖子建议把它放在 .bashrc 中)