对于Linux系统下,程序运行出现Crash,可以生成coredump文件用于分析排查,而要生成完整的coredump需要关注如下配置项:在Linux系统下,默认是不会生成coredump文件的,需要通过如下命令配置coredump的大小:其中,$size可以为指定大小,也可以使用unlimited,表示不限制。如果想每次开机都能生效,让系统默认生成coredump文件,那么可以修改/etc/security/limits.conf文件进行相关配置。sysctl涉及到coredump相关的配置项如下:kernel.core_file_note_size_limit = 4194304kernel.core_pattern = |/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -F%F -- %Ekernel.core_pipe_limit = 10kernel.core_sort_vma = 0kernel.core_uses_pid = 0
其中,core_pattern配置为coredump文件生成的路径及命名格式。进程出现coredump时,会dump哪些内存?默认情况是dump部分,避免最终生成文件过大,尤其是进程里面申请内存非常多的情况。不过,有些时候为了方便排查,会把所有相关内存全部dump出来,这个时候可以用如下路径文件:/proc/$pid/coredump_filter
其中,$pid为要配置的进程的ID,可以设置filter值为0xff来表示 要dump所有值。综上所述,我们有如下脚本可以方便我们简单配置,如果要在当前Shell终端生效,则要用source ./script_name.sh或者. ./script_name.sh来执行:#!/bin/bash#unlimited core file sizeulimit -c unlimited#dump all memorypid=`pgrep xxx`echo "0xFF" > /proc/$pid/coredump_filter#core file namesysctl -w kernel.core_pattern=/home/coredump/core-%e-%p-%t-%h
上述内容为linux coredump的简单使用配置说明,欢迎补充!