一、coredump
参考:https://blog.youkuaiyun.com/qq_43714097/article/details/130734858
Core dump,也被称为核心转储,是当程序运行过程中发生异常导致异常退出或中止时,由操作系统生成的一个文件。这个文件保存了程序异常时的内存、寄存器、堆栈等数据,可以理解为程序工作当前状态的一个存储文件。Core dump文件通常包含了程序崩溃时的全部状态信息,包括用户空间的内存信息,如用户空间栈、代码段、数据段和堆等,但不包含内核空间栈的信息。
Core dump文件主要用于后续的调试和分析,通过读取这个文件,程序员可以定位到程序异常退出时的堆栈调用等信息,从而找出问题所在并进行修复。例如,当一个进程因为非法内存访问、非法指令等原因异常终止时,操作系统可以将进程的内存信息保存到一个core dump文件中,这个文件可以用于后续调试以找出问题的根源。
Core dump的主要作用在于帮助程序员或系统管理员诊断程序崩溃或异常终止的原因。当一个程序因为某种错误(如段错误、总线错误、非法指令等)而异常终止时,操作系统会生成一个core dump文件,该文件包含了程序崩溃时内存、寄存器以及堆栈的状态信息。这些信息对于后续的调试和分析至关重要。core dump的作用如下:
- 问题定位:通过分析core dump文件(包含了崩溃时的内存状态信息,包括变量值、函数调用栈等等),程序员可以回溯到程序崩溃时的执行路径,查看堆栈调用信息,从而定位到可能的问题代码段。
- 内存检查:core dump文件保存了程序崩溃时的内存快照,因此可以用来检查程序在崩溃时内存的使用情况,查找内存泄漏、越界访问等问题。
- 代码审查:分析core dump文件可以帮助程序员理解程序的执行流程,审查代码逻辑是否正确,以及是否存在潜在的缺陷。
- 系统监控:对于系统管理员来说,core dump文件可以作为系统稳定性的一个指标。通过分析这些文件,管理员可以了解系统中哪些程序容易崩溃,以及崩溃的原因,从而采取相应的措施来提高系统的稳定性。
- 第三方工具支持:许多调试工具(如gdb)都支持core dump文件的读取和分析,这使得问题定位和分析变得更加容易和高效。
- 帮助复现问题:有时候程序崩溃是难以复现的,生成 core dump 可以帮助程序员在不同的环境中重现问题,以便更好地调试。
- 支持故障排除:当程序出现故障时,生成 core dump 可以帮助程序员快速找到问题的原因,以便更快地解决问题。
二、coredump配置
Core dump的配置主要涉及启用core dump、设置core dump文件的存储位置以及调整相关限制。
2.1 启用Core Dump
- 通过ulimit命令查看当前系统是否支持core dump。在终端中输入ulimit -c,如果返回值为0,则表示core dump被关闭。
- 要启用core dump,可以使用命令ulimit -c unlimited。这将允许程序在异常终止时生成core dump文件。
ulimit -a // 检查配置
其中,core file size 指定了 core dump 文件的最大大小,core dump file name 指定了 core dump 文件的名称模板,unlimited 表示不限制。
2.2 设置Core Dump文件的存储位置和格式
- Core dump文件的默认存储位置通常与可执行文件在同一目录下,文件名为core。
- 要自定义core dump文件的存储位置和名称格式,可以编辑/proc/sys/kernel/core_pattern文件。
- 例如,使用命令
echo "core-%e-%p-%s-%t" > /proc/sys/kernel/core_pattern
可以将core dump文件命名为包含可执行文件名、进程ID、信号号和时间的格式。其中:- %e 表示造成core dump的可执行文件名。
- %p 表示造成core dump的进程的PID。
- %s 表示造成core dump的信号号。
- %t 表示core dump文件生成的时间(从1970年1月1日00:00:00开始的秒数)。
2.3 调整Core Dump文件的大小限制:
默认情况下,系统可能限制了core dump文件的大小。如果需要生成更大的core dump文件,可以通过修改相关系统限制来实现。这通常涉及到编辑/etc/security/limits.conf文件或使用setrlimit系统调用。