合 Linux中core文件简介及关闭systemd-coredump服务
Tags: LinuxOScore文件systemd-coredump
简介
在程序不寻常退出时,内核会在当前工作目录下生成一个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文件。