【Linux】coredump性能消耗

参考

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.程序恢复时间
评论
    test