如何设置核心转储文件位置(和名称)?

如何设置核心转储文件位置(和名称)?

我在 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。有两种方法可以解决这个问题:

  1. 配置文件中的设置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
  1. 停止 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 应用程序调试技术/核心文件

相关内容