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


17

我在CentOS 6上,试图为正在开发的应用程序启用核心转储。我把:

ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null

进入我的bash配置文件,但仍未生成核心转储(在新终端中)。

我还更改了/etc/security/limits.conf,以使所有用户的软限制为零。

如何设置要输出的核心文件的位置?我想指定位置并附加生成转储的时间,作为文件名的一部分吗?


1
这可能会有所帮助:stackoverflow.com/a/16048288/2808351
dhag 2015年

Answers:


27

要在CentOS 6中设置核心转储的位置,您可以进行编辑/etc/sysctl.conf。例如,如果要在/var/crash以下位置进行核心转储:

kernel.core_pattern = /var/crash/core-%e-%s-%u-%g-%p-%t

变量在哪里:

%e是文件名
%g是在
%p下运行的进程的gid是进程的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/etc/abrt/abrt.conf配置文件中设置DumpLocation =来指定目标目录,该目录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
    
  2. 停止abrtd服务。kernel.core_pattern不会被覆盖。-(我从未测试过)。


1
很棒的答案。可能值得注意的是,在EFI系统上,您还会在系统闪存中转储。
mikeserv

0

为了在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是在
%p下运行的进程的gid是进程的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应用程序调试技术/核心文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.