runsisi's

technical notes

coredump 文件生成

2019-01-22 runsisi#debug

查看当前 coredump 文件的生成位置:

~# sysctl -a | grep pattern
kernel.core_pattern = /var/log/coredumps/core-sig%s-pid%p-uid%u
~# cat /proc/sys/kernel/core_pattern
/var/log/coredumps/core-sig%s-pid%p-uid%u

查看目标路径是否有权限(显然这里设置的路径 ceph 进程没有权限,因为 ceph 进程是以 ceph 用户运行的):

~# ll /var/log/coredumps/ -d
drwxr-xr-x. 2 root root 20480 Dec 1 09:43 /var/log/coredumps/

查看是否用户配额有限制,但需要注意的是由 systemd 起的服务,完全忽略 /etc/security/limits.* 的配置,由于 ceph 的服务都是由 systemd 起的,且默认的 .service 没有定义 core 文件的大小限制,因此这里没有查看的必要:

~# ulimit -a
core file size (blocks, -c) 2048000
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 13383
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 65535
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) 13383
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
~# ulimit -c
2048000

查找合适的信号:

~# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

测试:

~# kill -s SIGSEGV 3462934
~# kill -SIGSEGV 3544400
~# kill -s 11 3485824
~# kill -11 3512012

当然,也可以使用 gcore(与 gstack/pstack 类似,都包含在 gdb 安装包中,其中 pstack 是 gstack 的符号链接)为运行的程序在当前目录生成 coredump 文件:

~# gcore 3613325
...
Saved corefile core.3613325

man 手册页提供了更多的信息:

~# man 5 core
~# man 7 signal

参考资料

[1] core - core dump file

http://man7.org/linux/man-pages/man5/core.5.html

[2] signal - overview of signals

http://man7.org/linux/man-pages/man7/signal.7.html

[3] How to set ulimits on service with systemd?

https://unix.stackexchange.com/questions/345595/how-to-set-ulimits-on-service-with-systemd

[4] Increasing nproc for processes launched by systemd on CentOS 7

https://serverfault.com/questions/628610/increasing-nproc-for-processes-launched-by-systemd-on-centos-7/678861