默认情况下,core文件生成在可执行文件的同名目录下,在大规模应用场景,将十分痛苦,也随时面对着磁盘被吃满的危险。
本文将简要介绍以下core生成的相关配置,提供一个简单的core统计方案。
1、core文件的生成
1.1 core文件存放路径以及名称
在kernel-2.5 版本以上的内核可以通过文件/proc/sys/kernelcore_pattern 和/proc/sys/kernel/core_uses_pid 配置;
笔者使用的是Suse Enterprise可以通过sysctl 修改相关的字段配置,其他的发行版本是否能正常工作未经核实。
默认情况下,这个文件中内容为"core",也就是默认情况下的core文件名;如果要将core文件安dump到其他目录,则直接配置即可,如:“/path/core_files/core.%e.%t”
- %e 可执行文件名称
- %t dump的时间,1970年至今的秒数,同time()
- /proc/sys/kernel/core_uses_pid
- %% %
- %u UID
- %g GID
- %p PID,是否有效还取决于文件/proc/sys/kernel/core_uses_pid 的值(2.4内核可以同样可以通过/etc/sysctl.conf配置),默认情况下这个文件中的值为0,即不启用,置成1极为启用
注意事项 :
1、生成core文件名最大长度为64字节,超过长度部分将被截断
2、通过sysctl配置的方法分别为:
sysctl -w kernel.core_pattern="/path/core.%e.%t"
sysctl -w kernel.core_user_pid=1
1.2 core大小限制
如果,对core大小不做任何限制,coredump出的文件大小即core进程的内存空间,磁盘空间咔咔就满了。
只需要通过ulimit 控制一下就OK了。
ulimit -S -c xx
- -c --core_size,生成的core文件大小,以block为单位,该值为0,即禁止core的生成
- ulimit的使用方法,后续整理
2、统计
假设已经将core文件集中存放在/path下,就可通过定时扫描该目录下的文件名,分析出哪些文件有core了,并做适当的清理(否则,累计起来的core文件可能写满磁盘)
2.1 解析生成core的文件
core_path="/path"
core_file_list="/tmp/core_file_list"
find ${core_path} -maxdepth 1 -mindepth 1 -type f -name "core.*.[0-9]*[0-9]" -fprint ${core_file_list}
while read core_file
do
core_file=`echo $core_file | awk -F. '{print $2}'`
core_time=`echo $core_file | awk -F. '{print $3}'`
/// 将得到的信息上报到统一的位置,如通过wget上报到cgi
log $core_file $core_time
report $core_file $core_time
done < ${core_file_list}
if [ -f ${core_file_list} ];then
rm ${core_file_list}
fi