1. 通过ulimit -c unlimited可以打开coredump, (也可以通过setrlimit()API设置RLIMIT_CORE大小)
2. 通过/proc/sys/kernel/core_pattern设置coredump文件的保存地方(也可以在sysctl.cfg里面配置)
3. 通过每个进程下都有coredump_filter节点/proc/
- - (bit 0) anonymous private memory
- - (bit 1) anonymous shared memory
- - (bit 2) file-backed private memory
- - (bit 3) file-backed shared memory
- - (bit 4) ELF header pages in file-backed private memory areas (it is effective only if the bit 2 is cleared)
- - (bit 5) hugetlb private memory
- - (bit 6) hugetlb shared memory
- - (bit 7) DAX private memory
- - (bit 8) DAX shared memory
4. 配置coredump文件压缩(coredump文件一般都比较大,但是压缩会变得很小)
- #1. 在sysctl.cfg里面配置:
- kernel.core_pattern=|/usr/bin/coredump_helper.sh core_%e_%I_%p_sig_%s_time_%t.gz
- kernel.core_uses_pid=1
-
- #2 增加处理coredump文件的脚本:
-
- #!/bin/sh
- mkdir -p /var/coredump
- gzip > "/var/coredump/$1"
-
- #3 最终在/var/coredump目录下生成core_<线程名>_<线程ID>_<进程ID>_sig_<信号值>_time_
.gz文件 的压缩后的文件。
参考: