我在CentOS 6上,试图为正在开发的应用程序启用核心转储。我把:
ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null
进入我的bash配置文件,但仍未生成核心转储(在新终端中)。
我还更改了/etc/security/limits.conf,以使所有用户的软限制为零。
如何设置要输出的核心文件的位置?我想指定位置并附加生成转储的时间,作为文件名的一部分吗?
我在CentOS 6上,试图为正在开发的应用程序启用核心转储。我把:
ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null
进入我的bash配置文件,但仍未生成核心转储(在新终端中)。
我还更改了/etc/security/limits.conf,以使所有用户的软限制为零。
如何设置要输出的核心文件的位置?我想指定位置并附加生成转储的时间,作为文件名的一部分吗?
Answers:
要在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
。有两种解决方法:
配置文件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
停止abrtd服务。kernel.core_pattern
不会被覆盖。-(我从未测试过)。
为了在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应用程序调试技术/核心文件