linux系统内存dump机制介绍(二)--coredump

达芬奇密码2018-07-19 12:36
  • coredump原理介绍

coredump是一种基于异步信号的内存信息捕获机制,可以触发coredump的信号有sigbus,sigsegv,sigill,sigabrt等。查找man手册可以获得更多的信息。coredump机制提供用户态内存信息的镜像,方便用户事后debug程序。

  • coredump实现机制
在操作系统信号处理流程中会判断当前信号是否是coredump信号,如果是coredump信号则进入dump流程将内存保存到文件中提供给我用户debug分析。
do_signal是内核信号处理的入口,真正的信号处理逻辑在get_signal_to_deliver函数中,这里我们就能看到coredump的判断逻辑和入口函数:
		if (sig_kernel_coredump(signr)) {               //判断接收到的信号是否是coredump信号
			if (print_fatal_signals)
				print_fatal_signal(info->si_signo);
			proc_coredump_connector(current);
			/*
			 * If it was able to dump core, this kills all
			 * other threads in the group and synchronizes with
			 * their demise.  If we lost the race with another
			 * thread getting here, it set group_exit_code
			 * first and our do_group_exit call below will use
			 * that value and ignore the one we pass it.
			 */
			do_coredump(info);   //coredump的实现入口
		}
 在do_coredump中会判断与coredump相关的一些配置信息(是否配置了管道,ulimit是否正确,文件大小以及生成路径和文件名),并且生成对应的core文件。
  • coredump使用
      coredump机制目前内核默认都已经集成,主要的配置接口有:
  1. ulimit,通过ulimit -a查看当前配置,执行ulimit -c unlimited将core file size改为ulimited
  2. /proc/sys/kernel/core_pattern,该配置项用于配置生成的core文件路径已经名字,相信信息可以通过man 5 core来查询
  3. /proc/pid/core_filter,用于配置dump文件具体内容,详细信息可以通过man 5 core来查询


本文来自网易实践者社区,经作者赵建明授权发布。