简介

Kdump 和 core dump 都是当 Linux 出现异常时用来收集信息以帮助分析问题的机制,但它们在适用领域、触发条件、收集内容等方面有明显区别。

Core dump

core dump 主要针对运行在用户空间的程序。当用户空间的程序出现严重错误而崩溃时,系统会生成一个 core dump 文件,记录该程序崩溃时的内存状态和寄存器等信息,方便对程序进行调试和问题定位。
core dump 是由用户空间的程序出现的异常触发的,这些异常一般包括:

  • 程序试图访问未分配给自己的内存地址,引发段错误。
  • 除零错误,当程序执行除法运算时除数为零。
  • 栈溢出,程序使用的栈空间超过了系统分配的限制。

注意:如果无法生成core dump文件的话,是因为系统默认core dump文件大小为0字节了,需要用指令ulimit -c xxx 设置一下;
ulimit指令:
S:表示软限制,超出设定的值会告警。
H :表示硬限制,超出设定的值会报错。
a :列出系统所有资源限制的值
c:当某些程序发生错误时,系统可能会将该程序在内存中的一些运行信息写成文件(除错用),这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量
d:每个进程数据段的最大值
f:当前shell可创建的最大文件容量
l:可以锁定的物理内存的最大值
m:可以使用的常驻内存的最大值
n:每个进程可以同时打开的最大文件句柄数
p:管道的最大值
s:堆栈的最大值
t:每个进程可以使用CPU的最大时间
u:每个用户运行的最大进程并发数
v:当前shell可使用的最大虚拟内存

coredump的文件一般在/var/crash下,查看命令为gdb -q core.文件后输入bt,输入quit退出。

Kdump

Kdump 作用于系统内核空间,是专门为内核崩溃(如内核恐慌,Kernel Panic)而设计的机制。当 Linux 内核遇到无法处理的错误时,Kdump 会被触发,将内核崩溃时的系统状态保存下来,用于后续分析内核崩溃的原因。
在系统启动时,Kdump 会预留一部分物理内存用于加载一个备用内核(kdump 内核)。当主内核崩溃时,系统会切换到 kdump 内核,由 kdump 内核将主内核崩溃时的内存状态保存到磁盘上,生成核心转储文件(通常是 vmcore)。
常见的内核崩溃原因包括:

  • 内核代码中的 bug,如内存管理错误、死锁等。
  • 硬件故障,如内存错误、磁盘故障等影响到内核的正常运行。
  • 不兼容的内核模块或驱动程序,导致内核在加载或使用这些模块时崩溃。
posted on 2025-06-03 15:55  jiayou111  阅读(112)  评论(0)    收藏  举报