参考
http://sunyongfeng.com/201609/programmer/tools/coredump
https://mcgrady-forever.github.io/2018/03/27/linux-coredump/
https://blog.csdn.net/guotianqing/article/details/78760623
coredump 简介
- coredump 文件 亦称为 core 文件
- 包含程序运行时的内存信息,含寄存器状态、堆栈指针、内存管理信息、操作系统 flags 及其他信息
- 可以理解为把程序工作的当前状态存储成一个文件
- Coredump 文件通常于程序异常终止(crashed)时自动生成,常用于辅助分析和解决 bug,可通过 coredump 文件进行栈回溯和反汇编
- 是二进制文件
- Linux 平台可以使用 gdb、elfdump、objdump 打开 coredump
- windows 平台可以使用 windebug 打开 coredump
- solaris 平台可以使用 mdb 打开 coredump
coredump 机制
Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,
对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,
并且随着吐Core进程的内存空间越大,此过程可能持续很长一段时间
(例如当进程占用60G+以上内存时,完整Core文件需要15分钟才能完全写到磁盘上),这期间产生的流量损失,不可估量。
凡事皆有两面性,OS在出Core的同时,虽然会终止掉当前进程,但是也会保留下第一手的现场数据,
OS仿佛是一架被按下快门的相机,而照片就是产出的Core文件。
里面含有当进程被终止时内存、CPU寄存器等信息,可以供后续开发人员进行调试。
部署 coredump
coredump 文件的保存路径和文件名格式
%p – insert pid into filename 【pid】
%u – insert current uid into filename 【uid】
%g – insert current gid into filename 【gid】
%s – insert signal that caused the coredump into the filename 【core信号】
%t – insert UNIX time that the coredump occurred into filename 【core文件生成时的unix时间】
%h – insert hostname where the coredump happened into filename 【主机名】
%e – insert coredumping executable name into filename 【应用的名字】
部署方式
规划 coredump 存储路径和格式
sysctl -w kernel.core_pattern = kernel.core_pattern=/存放路径/coredump/core.%e.%p.%t.%s.%u.%g
注意: 如需永久生效,请配置在/etc/sysctl.conf
sysctl -p
检查生成 core 文件的选项是否打开
ulimit -c
打开生成 core 文件的选项
ulimit -c unlimited
或
ulimit -c 1073741824 #注意,若将产生的转储文件大小大于该数字时,将不会产生转储文(1073741824等价于1G)
检查生成 core 文件的选项是否打开
ulimit -c
影响
时间
当产生的coredump太大,生成的时间会成线性增长,建议控制产生coredump的大小
空间
当产生的coredump太大,会导致磁盘的空间消耗,需要定期清理coredump文件
资源
当产生的coredump太大,对应的资源消耗会成线性增长,由于系统不可用,对程序的影响较小;
所以最大的影响就是 coredump生成的时间+程序恢复的时间;
即 非程序运行时间需要控制,
1.需要控制 coredump生成的时间
2.程序恢复时间