-1

我有两台服务器运行供应商应用程序。在一台服务器上,如果应用程序崩溃,它会创建核心转储,但第二台服务器不会。

服务器应该设置相同,但我试图弄清楚为什么应用程序不创建核心转储。我已经检查了所有典型设置,并且一直在做研究,但没有运气。

奇怪的是,如果我kill -s SIGSEGV $$以我的应用程序用户身份运行 a ,它会在应用程序应该创建核心转储的同一目录中生成一个核心转储。供应商和 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'
4

1 回答 1

3

未创建 coredump 可能还有其他几个原因。查看 core(5) 中可能的原因列表:http: //linux.die.net/man/5/core

检查 dmesg 输出。

检查 /proc/PID/limits 中的特定进程核心文件大小限制。

检查进程用户是否可以在 /proc/PID/cwd 目录中创建典型 coredump 大小的文件。

在 /proc/sys/kernel/core_pattern 中指定绝对文件路径,指向已知的可写位置。

根据 core(5) 创建一个遵守 coredump-accepting 协议的短程序,将其保存在某处,并在 /proc/sys/kernel/core_pattern 中指定它。通过管道传输到程序的 Coredump 不受限制。

于 2013-05-02T17:01:13.547 回答