1. 打开core开关
1.1 控制台方式(当前console有效)
1 | ulimit -c 0 # 不产生core |
1.2 配置方式
1 | vim /etc/security/limits.conf |
2. 修改core命名规则或生成路径
2.1 默认下core在当前目录下,并且命名为core.pid;
2.2 临时修改:
可以直接修改/proc/sys/kernel/core_pattern
文件的内容。例如,使用命令echo '/var/log/%e.core.%p' > /proc/sys/kernel/core_pattern
,就可以将core dump文件的生成路径设置为/var/log/
目录,文件名设置为进程名和进程ID。需要注意的是,/proc
目录是动态加载的,每次系统重启都会重新加载,因此这种方法只能作为临时修改。
2.3 永久修改
如果想要永久修改core dump文件的生成路径和命名规则,可以通过修改/etc/sysctl.conf
文件来实现。在/etc/sysctl.conf
文件中,添加一行kernel.core_pattern = /var/log/%e.core.%p
,然后保存退出。最后,使用命令sysctl -p
使修改生效。
1 | kernel.core_pattern= /var/log/%e.core.%p |
2.4 core_pattern
的格式可以包含以下一些元素:
%p
:转储过程的PID%u
:转储进程的实际UID%g
:转储过程的实际GID%s
:引起转储的信号数%t
:转储时间,表示为自1970年1月1日00:00:00 +0000(UTC)以来的秒数%h
:主机名(与uname(2)返回的节点名相同)%e
:可执行文件名(无路径前缀)%E
:可执行文件的路径名,用斜杠(’/’)替换为感叹号(’! ’)%c
:崩溃过程的核心文件大小软资源限制(自Linux 2.6.24开始)
3. 生效
重启或这sysclt -p立即生效
4. 设置core_pattern建议
- 设置core文件的存放路径和文件名模式:你可以通过设置
/proc/sys/kernel/core_pattern
来指定core文件的存放路径和文件名模式。例如,你可以使用命令echo "/var/log/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
,这样当程序崩溃产生core dump时,会直接以这种格式存入到/var/log/
目录下。 - 使用进程ID和时间戳:在文件名模式中,建议至少包含
%p
(进程ID)和%t
(时间戳),这样可以帮助你更好地区分不同的core dump文件。 - 使用可执行文件名:如果你的系统中运行了多个程序,那么在文件名模式中包含
%e
(可执行文件名)可能会很有帮助,这样你可以知道是哪个程序产生了core dump。 - 使用管道符号:如果你希望在生成core dump文件的同时进行一些其他操作(例如压缩或发送通知),你可以在
core_pattern
的开头添加管道符号|
,然后指定一个脚本,core dump将会以标准输入的形式传给这个脚本。 - 设置core文件的最大值:默认情况下,core文件的大小可能会受到限制。你可以使用
ulimit -c unlimited
命令来取消这个限制,或者设置一个适合你的系统的大小。