我在 CentOS 6 上,尝试为我正在开发的应用程序启用核心转储。我已经把:
ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null
到我的 bash 配置文件中,但仍然没有生成核心转储(在新终端中)。
我还更改了 /etc/security/limits.conf,以便所有用户的软限制为零。
如何设置核心文件的输出位置?我想指定位置并附加生成转储的时间,作为文件名的一部分?
答案1
要在 CentOS 6 中设置核心转储的位置,您可以编辑/etc/sysctl.conf
.例如,如果您想要核心转储/var/crash
:
kernel.core_pattern=/var/crash/core-%e-%s-%u-%g-%p-%t #corrected spaces before and after =
其中变量是:
%e是文件名
%G是进程运行时的 gid
%p是进程的pid
%s是导致转储的信号
%t是转储发生的时间
%u是进程运行时的 uid
另外你还必须添加/etc/sysconfig/init
DAEMON_COREFILE_LIMIT='unlimited'
现在应用新的更改:
$ sysctl -p
但这种方式有一个警告。如果内核参数 kernel.core_pattern 在重新启动时始终重置并覆盖为以下配置,即使在 中手动指定了值 /etc/sysctl.conf
:
|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e
简而言之,abrtd.service
启动时kernel.core_pattern
会被系统安装时自动覆盖abrt-addon-ccpp
。有两种方法可以解决这个问题:
- 配置文件中的设置
DumpLocation
选项/etc/abrt/abrt.conf
。可以通过在配置文件/var/crash
中设置 DumpLocation = 来指定目标目录/etc/abrt/abrt.conf
, 和sysctl kernel.core_pattern
的显示值相同,但实际上核心文件会创建到 下的目录中/var/crash
。
另外,如果您启用了 SELinux,则必须运行:
$ semanage fcontext -a -t public_content_rw_t "/var/crash(/.*)?"
$ setsebool -P abrt_anon_write 1
最后重新启动abrtd.service
:
$ service abrtd.service restart
- 停止 abrtd 服务。
kernel.core_pattern
不会被覆盖。 -(我从未测试过)。
答案2
要在 Busybox 上生成核心转储,我们可以在运行可执行文件的初始化脚本中添加以下参数。因此,每当我们初始化软件并导出环境变量时,我们都可以将以下行复制到脚本中,并转储核心,以防万一我们看到任何崩溃。
要在 Busybox 中设置核心转储的位置,您可以使用 proc 文件系统设置核心文件路径。例如,如果您希望在以下位置进行核心转储/tmp/crash/corefiles
:
mkdir -p /tmp/crash/corefiles
chmod 775 /tmp/crash/corefiles
echo "/tmp/crash/corefiles/%e.%s.core" > /proc/sys/kernel/core_pattern
其中变量是:
%e是文件名
%G是进程运行时的 gid
%p是进程的pid
%s是导致转储的信号
%t是转储发生的时间
%u是进程运行时的 uid
另外,您必须设置核心文件大小,以下命令将核心文件大小设置为无限
ulimit -c unlimited
现在要检查进程中每个线程设置的核心文件大小,我们可以使用
cat /proc/<PID>/limits
上述命令的输出:
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size unlimited unlimited bytes
Max open files 10000 10000 files
Max address space unlimited unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 31868 31868 processes
Max locked memory 65536 65536 bytes
Max file locks unlimited unlimited locks
Max pending signals 31868 31868 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
从上面的输出中我们可以看到最大核心文件大小设置为无限制。
欲了解更多信息,请访问此链接。 Linux 应用程序调试技术/核心文件