coredump设置方法

来源:互联网 发布:新网 未备案域名 访问 编辑:程序博客网 时间:2024/06/05 17:42

此资料源自同事,故不知转载地址,在此做记录用


1. 内核转储(coredump)作用

(1) 内核转储的最大好处是能够保存问题发生时的状态。
(2) 只要有可执行文件和内核转储,就可以知道进程当时的状态。
(3) 只要获取内核转储,那么即使没有复现环境,也能调试。

Edit

2. 启用内核转储

Edit

2.1 查看内核转储是否有效

在终端中输入以下命令,查看内核转储是否有效。
#ulimit -c
0

-c 表示内核转储文件的大小限制,现在显示为零,表示不能用。
可以改为1G
#ulimit -c 1073741824

也可以改为无限制
#ulimit -c unlimited

#ulimit -c 
unlimited

Edit

2.2 永久生效的办法

上面所述的方法,只是在当前shell中生效,重启之后,就不再有效了。永久生效的办法是:

方法一 
#vi /etc/profile 然后,在profile中添加:
ulimit -c 1073741824
(但是,若将产生的转储文件大小大于该数字时,将不会产生转储文件)
或者
ulimit -c unlimited
这样重启机器后生效了。 或者, 使用source命令使之马上生效。
#source /etc/profile

方法二 永久打开coredump输出
编辑 /etc/security/limits.conf
修改这行内容: #* soft core 0 
为这行: * soft core unlimited

Edit

3. 指定内核转储的文件名和目录

缺省情况下,内核在coredump时所产生的core文件放在与该程序相同的目录中,并且文件名固定为core。很显然,如果有多个程序产生core文件,或者同一个程序多次崩溃,就会重复覆盖同一个core文件。

我们可以通过修改kernel的参数,指定内核转储所生成的core文件的路径和文件名。

可以通过在/etc/sysctl.conf文件中,对sysctl变量kernel.core_pattern的设置。

#vi /etc/sysctl.conf 然后,在sysctl.conf文件中添加下面两句话:

kernel.core_pattern = /var/core/core_%e_%p

kernel.core_uses_pid = 0

保存后退出。
注释:/var/core/表示coredump保存路径,可以修改为自己想保存的路径

需要说明的是, /proc/sys/kernel/core_uses_pid。如果这个文件的内容被配置成1,即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。

这里%e, %p分别表示:

%c 转储文件的大小上限

%e 所dump的文件名

%g 所dump的进程的实际组ID

%h 主机名

%p 所dump的进程PID

%s 导致本次coredump的信号

%t 转储时刻(由1970年1月1日起计的秒数)

%u 所dump进程的实际用户ID

可以使用以下命令,使修改结果马上生效。

#sysctl –p /etc/sysctl.conf

0 0
原创粉丝点击