我有两台运行供应商应用程序的服务器。在一台服务器上,如果应用程序崩溃,它会创建一个核心转储,但第二个却没有。
服务器应该设置相同,但我试图弄清楚为什么应用程序不会创建核心转储。我检查了所有典型的设置,并且一直在做研究而没有运气。
奇怪的是,如果我作为我的app用户运行kill -s SIGSEGV $$
,它会在应用程序创建核心转储的同一目录中生成核心转储。供应商和Linux集团目前都不确定,这就是我在这里寻求帮助的原因。
$ cat /proc/sys/kernel/core_pattern
core
$ cat /proc/sys/kernal/core_uses_pid
1
$ ulimit -c
unlimited
$ cat /etc/security/limits.conf | grep core
* soft core unlimited
* hard core unlimited
$ cat /etc/profile | grep ulimit
ulimit -c unlimited > /dev/null 2>&1
$ cat /proc/sys/fs/suid_dumpable
0
$ cat /etc/sysconfig/init | grep CORE
DAEMON_COREFILE_LIMIT='unlimited'
答案 0 :(得分:3)
为什么没有创建coredump可能还有其他几个原因。检查核心(5)中可能的原因列表:http://linux.die.net/man/5/core
检查dmesg输出。
检查/ proc / PID / limits中的特定进程corefile大小限制。
检查进程用户是否可以在/ proc / PID / cwd目录中创建典型coredump大小的文件。
在/ proc / sys / kernel / core_pattern中指定绝对文件路径,指向已知的可写位置。
根据核心(5)创建一个遵循coredump接受协议的短程序,将其保存在某处,并在/ proc / sys / kernel / core_pattern中指定它。用于节目的Coredumps不受限制。