Linux基础:Coredump文件位置的设定方法

Linux发行版不同,Coredump文件所出现的目录也会有所不同,这篇文章以CentOS 7.6下Coredump文件的路径设定方法为例,进行简单的说明。

环境准备

[root@host131 ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
[root@host131 ~]# uname -a
Linux host131 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@host131 ~]# 

设定方法

最简单的方式可以使用如下步骤进行验证

步骤1: 设定ulimit -c

首先确认ulimit -c的值

[root@host131 ~]# ulimit -c
0
[root@host131 ~]# 

可设定core文件的大小为unlimited或者指定的最大Size

[root@host131 ~]# ulimit -c unlimited
[root@host131 ~]# ulimit -c
unlimited
[root@host131 ~]#

步骤2: 设定Coredump文件的保存位置与格式

执行命令:sysctl -w kernel.core_pattern=/var/crash/core.%u.%e.%p

命令说明:此命令将coredump文件缺省会保存至/var/crash目录下,文件名称格式为core.%u.%e.%p

执行示例如下

[root@host131 ~]# sysctl -w kernel.core_pattern=/var/crash/core.%u.%e.%p
kernel.core_pattern = /var/crash/core.%u.%e.%p
[root@host131 ~]#

core文件生成方法

验证core文件有多种方式,比如

方式1: kill -3

使用sleep 100命令提供产生coredump的进程,此处进程号为15032

[root@host131 ~]# sleep 100 &
[1] 15032
[root@host131 ~]# ps -ef |grep sleep |grep -v grep
root     15032  6129  0 06:38 pts/2    00:00:00 sleep 100
[root@host131 ~]# 

发送SIGQUIT至此进程

[root@host131 ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
[root@host131 ~]# ls /var/crash/
[root@host131 ~]# kill -3 15032
[root@host131 ~]# 
[1]+  Quit                    (core dumped) sleep 100
[root@host131 ~]#

确认coredump文件名称和位置

[root@host131 ~]# ls /var/crash/
core.0.sleep.15032
[root@host131 ~]# 

方式2: 使用产生异常的代码

比如使用如下示例代码,执行时肯定会产生coredump

[root@host131 ~]# cat create_coredump.c 
int main() {
  return 1/0;
}
[root@host131 ~]# 

编译生成可执行文件a.out

[root@host131 ~]# gcc create_coredump.c 
create_coredump.c: In function ‘main’:
create_coredump.c:2:11: warning: division by zero [-Wdiv-by-zero]
   return 1/0;
           ^
[root@host131 ~]# ls a.out 
a.out
[root@host131 ~]# 

执行生成coredump文件

[root@host131 ~]# ls /var/crash/
core.0.sleep.15032
[root@host131 ~]# ./a.out
Floating point exception (core dumped)
[root@host131 ~]# 
[root@host131 ~]# ls /var/crash/
core.0.a.out.15868  core.0.sleep.15032
[root@host131 ~]# 

另外还可以使用gcore等产生Coredump文件,但gcore命令在gdb所在的包中,需要安装gdb,此处不再赘述。

注意事项

不同操作系统对此可能有所不同,另外此处演示只是作用与当前终端,重启或者新起终端仍然可用是需要设定配置文件/etc/sysctl.conf,这些在使用时都需要注意。

发布了1002 篇原创文章 · 获赞 1287 · 访问量 396万+

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/103826645