首页 > 代码库 > ulimit开启coredump时核心转储

ulimit开启coredump时核心转储

[root@localhost ~]# ulimit -c
0
[root@localhost ~]# 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) 7384
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7384
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

可以看到默认core文件大小为0,也就是coredump时并不生成core文件,如果要开启coredump则可以执行 ulimit -c unlimited 

另外可以看到core文件大小的单位是blocks,一个block的大小可以通过命令 /sbin/tune2fs -l /dev/sda1 查看

[root@localhost ~]# /sbin/tune2fs -l /dev/sda1|grep Block
Block count:              512000
Block size:               1024
Blocks per group:         8192

可以看到每个block的大小是1KB,那么要设置最大core文件大小为1GB则执行 ulimit -c 1048576 

因为保留core文件的目的在于调试程序,而限制了最大大小后core文件变得不完整也就失去了保留的意义,所以还是应该设置为unlimited

我的需求是总的core文件别占用太多空间,所以只能通过其他的方式实现:只保留最近6个最新的

ls -t /root/core.*|tail -n+6|xargs --no-run-if-empty rm

另外,关于core文件的文件名及格式可在 /proc/sys/kernel/core_pattern 中进行修改,或者在 /etc/sysctl.conf  里设置 kernel.core_pattern 实现重启后依然生效。

ulimit开启coredump时核心转储