合 Linux中core文件简介及关闭systemd-coredump服务
Tags: LinuxOSsystemd-coredumpcore文件
简介
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。
1 2 3 | [root@lhrdb ~]# ps -ef|grep coredump root 2276150 1914960 90 09:44 ? 00:00:01 /usr/lib/systemd/systemd-coredump 2276084 0 0 6 1700185497 18446744073709551615 test1 Xorg root 2276195 2266511 0 09:44 pts/7 00:00:00 grep --color=auto coredump |
默认情况下, Linux 会把core dump 的资讯储存在/var/crash/
目录, 而通过systemd 启动的服务, 则会储存在/var/lib/systemd/coredump/
目录。
core文件的生成开关和大小限制
(1)使用ulimit -c
命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。
1 2 | echo "ulimit -c 0" >> /root/.bashrc echo "ulimit -c 0" >> /etc/profile |
(2)使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。例如使用ulimit -c 1000
将会把core文件限制为1000KB。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件,在调试此core文件的时候,gdb会提示错误。
(3)使用ulimit -c unlimited,则表示core文件的大小不受限制。
(4)可以将ulimit -c unlimited写入到.bashrc中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@lhrblog ~]# echo "ulimit -c 0" >> /root/.bashrc [root@lhrblog ~]# echo "ulimit -c 0" >> /etc/profile [root@lhrblog ~]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 15076 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1048576 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited file locks (-x) unlimited |
core文件可执行程序的路径
默认为输入可执行文件运行命令的同一路径下。若系统生成的core文件不带其它任何扩展名称,则全部命名为core。新的core文件生成将覆盖原来的core文件。
如何查询和修改Linux操作系统生成core dump文件的默认路径?
1 2 3 4 | -- 方法1: cat /proc/sys/kernel/core_pattern -- 方法2: /sbin/sysctl kernel.core_pattern |
例如:
1 2 3 4 5 6 | [root@lhrdb ~]# cat /proc/sys/kernel/core_pattern |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e [root@lhrdb ~]# [root@lhrdb ~]# /sbin/sysctl kernel.core_pattern kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e [root@lhrdb ~]# |
core文件命名
控制core文件的文件名中是否添加pid作为扩展
这个文件/proc/sys/kernel/core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加 pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件统一命名为core。
可通过以下命令修改此文件:
1 2 3 | cat /proc/sys/kernel/core_uses_pid echo "1" > /proc/sys/kernel/core_uses_pid |
修改core dump文件保存路径和文件名格式
方法1:临时修改:修改/proc/sys/kernel/core_pattern文件,但/proc目录本身是动态加载的,每次系统重启都会重新加载,因此这种方法只能作为临时修改。
可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
1 | echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern |