searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

kdump使用

2023-08-25 01:59:39
40
0

kdump简介

  • kdump是Linux系统中一种用于保存系统崩溃时的内存转储(crash dump),以便进行故障诊断和调试的工具。
  • 在Linux系统中,如果遇到严重的内核崩溃或死锁等问题,通常会导致系统无法继续正常运行。为了解决这种情况,kdump允许在系统崩溃时将当前内核的内存转储保存到硬盘上。kdump通过一些特定的配置和设置,可以在系统崩溃时触发一个独立的内核(用作专用的crash内核),该内核能够将系统的内存转储保存到预定义的目录中。这个转储文件可以记录包括内核代码、进程状态、内核堆栈跟踪等信息,使开发人员和系统管理员能够在崩溃发生时进行故障分析和调试。
  • kdump是一种非常有用的工具,它可以帮助我们更有效地诊断系统崩溃问题,定位和解决导致系统异常的根本原因。

Kdump使用须知

  1. 系统配置:要使用kdump功能,您的系统必须满足一些硬件和配置要求:

必须有足够的磁盘空间来存储转储文件。

必须有足够的内存来容纳专用的crash内核。

CPU必须支持物理地址扩展(PAE)或64位寻址模式。

  1. 内核配置:您的Linux内核必须正确配置以启用kdump功能。通常,许多发行版都已经为您设置了合适的内核配置。

3.专用的crash内核:为了执行转储过程,kdump需要一个独立的crash内核。这个crash内核是一个精简的内核,只包含用于内存转储和调试的必要组件。

  1. 存储位置:您需要选择一个足够大且可靠的存储位置来保存转储文件。这可能是本地磁盘、NFS共享目录或iSCSI设备等。
  2. 网络配置(可选):如果您选择将转储文件发送到远程服务器进行分析,则需要配置网络连接和远程服务器的接收端。

Kdump配置方法

以EulerOS以及CentOS 7/8系列Linux产品为例:

  1. 查看是否已安装kexec-tools

# rpm -qa | grep kexec-tools

如果没有安装,执行下面命令安装kexec-tools。

# yum install -y kexec-tools

  1. 设置kdump开机启动

# systemctl enable kdump

  1. 设置crashkernel参数,设置这个参数的目的是预留内存给捕获内核(capture kernel)

首先查看该参数是否已经设置。

# grep crashkernel /proc/cmdline

如果有显示,则表示已经设置,如果没有显示,则需要重新设置。

编辑/etc/default/grub文件

GRUB_TIMEOUT=5

GRUB_DEFAULT=saved

GRUB_DISABLE_SUBMENU=true

GRUB_TERMINAL_OUTPUT="console"

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel00/root rd.lvm.lv=rhel00/swap rhgb quiet"

GRUB_DISABLE_RECOVERY="true"

在GRUB_CMDLINE_LINUX一行添加crashkernel=auto。

  1. 更新grub,执行更新grub命令,使配置生效:

# grub2-mkconfig -o /boot/grub2/grub.cfg

  1. 打开/etc/kdump.conf文件中找到“path”参数,添加以下内容。

path /var/crash

默认是保存在/var/crash目录下,如果要保存到其他目录,则改成对应的目录,例如保存在/home/kdump下,则改成:

path /home/kdump

## 请确保指定的路径有足够的空间保存vmcore,建议剩余空间不小于物理内存(RAM)的大小,也可以保存在SAN,NFS等共享设备上。

  1. 设置转存vmcore级别,查看/etc/kdump.conf文件,是否存在以下设置,如果存在则无需添加。

core_collector makedumpfile -d 31 -c

-c:表示压缩vmcore文件,

-d:表示过滤掉部分无效的内存数据,可以根据需要调整,一般31即可,31是由如下的值与计算而成。

zero pages = 1

cache pages = 2

cache private = 4

user pages = 8

free pages = 16

  1. 设置内核参数(可选)

为了控制在哪些场景下触发kdump,内核提供了一些参数,建议设置以下参数:

kernel.hardlockup_panic=1

kernel.panic=5

kernel.panic_on_oops=1

kernel.softlockup_panic=1

kernel.unknown_nmi_panic=1

kernel.nmi_watchdog=1

将以上配置参数写入/etc/sysctl.conf文件并保存。另外,可以选择添加如下几个参数到/etc/sysctl.conf文件中。

kernel.panic_on_io_nmi=1

kernel.panic_on_warn=1

  1. 进入天翼云控制台-云主机详情页,对当前云主机进行重启,使以上配置生效。

Kdump配置生效验证

  1. 执行以下命令,确认回显信息中crashkernel=auto

# cat /proc/cmdline |grep crashkernel

  1. 执行以下命令,并确认回显信息中的配置信息正确。

# grep core_collector /etc/kdump.conf |grep -v ^"#"

core_collector makedumpfile -l --message-level 1 -d 31

  1. 执行以下命令,并确认回显信息中的配置信息正确。

# grep path /etc/kdump.conf |grep -v ^"#"

path /var/crash

  1. 执行以下命令,并确认回显信息中的Active的状态为active (exited)。

# systemctl status kdump

  1. 执行测试命令。

# echo c > /proc/sysrq-trigger

这会触发kdump,重新启动,并将生成的vmcore文件保存的path参数指定的位置。

  1. 检查vmcore是否生成。

到所在环境path参数所指定的路径查看是否有vmcore文件生成,例如/var/crash/目录。

# ll /var/crash/

可以看到生成了一个文件夹,里面有vmcore文件。

0条评论
0 / 1000
段林
7文章数
0粉丝数
段林
7 文章 | 0 粉丝
原创

kdump使用

2023-08-25 01:59:39
40
0

kdump简介

  • kdump是Linux系统中一种用于保存系统崩溃时的内存转储(crash dump),以便进行故障诊断和调试的工具。
  • 在Linux系统中,如果遇到严重的内核崩溃或死锁等问题,通常会导致系统无法继续正常运行。为了解决这种情况,kdump允许在系统崩溃时将当前内核的内存转储保存到硬盘上。kdump通过一些特定的配置和设置,可以在系统崩溃时触发一个独立的内核(用作专用的crash内核),该内核能够将系统的内存转储保存到预定义的目录中。这个转储文件可以记录包括内核代码、进程状态、内核堆栈跟踪等信息,使开发人员和系统管理员能够在崩溃发生时进行故障分析和调试。
  • kdump是一种非常有用的工具,它可以帮助我们更有效地诊断系统崩溃问题,定位和解决导致系统异常的根本原因。

Kdump使用须知

  1. 系统配置:要使用kdump功能,您的系统必须满足一些硬件和配置要求:

必须有足够的磁盘空间来存储转储文件。

必须有足够的内存来容纳专用的crash内核。

CPU必须支持物理地址扩展(PAE)或64位寻址模式。

  1. 内核配置:您的Linux内核必须正确配置以启用kdump功能。通常,许多发行版都已经为您设置了合适的内核配置。

3.专用的crash内核:为了执行转储过程,kdump需要一个独立的crash内核。这个crash内核是一个精简的内核,只包含用于内存转储和调试的必要组件。

  1. 存储位置:您需要选择一个足够大且可靠的存储位置来保存转储文件。这可能是本地磁盘、NFS共享目录或iSCSI设备等。
  2. 网络配置(可选):如果您选择将转储文件发送到远程服务器进行分析,则需要配置网络连接和远程服务器的接收端。

Kdump配置方法

以EulerOS以及CentOS 7/8系列Linux产品为例:

  1. 查看是否已安装kexec-tools

# rpm -qa | grep kexec-tools

如果没有安装,执行下面命令安装kexec-tools。

# yum install -y kexec-tools

  1. 设置kdump开机启动

# systemctl enable kdump

  1. 设置crashkernel参数,设置这个参数的目的是预留内存给捕获内核(capture kernel)

首先查看该参数是否已经设置。

# grep crashkernel /proc/cmdline

如果有显示,则表示已经设置,如果没有显示,则需要重新设置。

编辑/etc/default/grub文件

GRUB_TIMEOUT=5

GRUB_DEFAULT=saved

GRUB_DISABLE_SUBMENU=true

GRUB_TERMINAL_OUTPUT="console"

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel00/root rd.lvm.lv=rhel00/swap rhgb quiet"

GRUB_DISABLE_RECOVERY="true"

在GRUB_CMDLINE_LINUX一行添加crashkernel=auto。

  1. 更新grub,执行更新grub命令,使配置生效:

# grub2-mkconfig -o /boot/grub2/grub.cfg

  1. 打开/etc/kdump.conf文件中找到“path”参数,添加以下内容。

path /var/crash

默认是保存在/var/crash目录下,如果要保存到其他目录,则改成对应的目录,例如保存在/home/kdump下,则改成:

path /home/kdump

## 请确保指定的路径有足够的空间保存vmcore,建议剩余空间不小于物理内存(RAM)的大小,也可以保存在SAN,NFS等共享设备上。

  1. 设置转存vmcore级别,查看/etc/kdump.conf文件,是否存在以下设置,如果存在则无需添加。

core_collector makedumpfile -d 31 -c

-c:表示压缩vmcore文件,

-d:表示过滤掉部分无效的内存数据,可以根据需要调整,一般31即可,31是由如下的值与计算而成。

zero pages = 1

cache pages = 2

cache private = 4

user pages = 8

free pages = 16

  1. 设置内核参数(可选)

为了控制在哪些场景下触发kdump,内核提供了一些参数,建议设置以下参数:

kernel.hardlockup_panic=1

kernel.panic=5

kernel.panic_on_oops=1

kernel.softlockup_panic=1

kernel.unknown_nmi_panic=1

kernel.nmi_watchdog=1

将以上配置参数写入/etc/sysctl.conf文件并保存。另外,可以选择添加如下几个参数到/etc/sysctl.conf文件中。

kernel.panic_on_io_nmi=1

kernel.panic_on_warn=1

  1. 进入天翼云控制台-云主机详情页,对当前云主机进行重启,使以上配置生效。

Kdump配置生效验证

  1. 执行以下命令,确认回显信息中crashkernel=auto

# cat /proc/cmdline |grep crashkernel

  1. 执行以下命令,并确认回显信息中的配置信息正确。

# grep core_collector /etc/kdump.conf |grep -v ^"#"

core_collector makedumpfile -l --message-level 1 -d 31

  1. 执行以下命令,并确认回显信息中的配置信息正确。

# grep path /etc/kdump.conf |grep -v ^"#"

path /var/crash

  1. 执行以下命令,并确认回显信息中的Active的状态为active (exited)。

# systemctl status kdump

  1. 执行测试命令。

# echo c > /proc/sysrq-trigger

这会触发kdump,重新启动,并将生成的vmcore文件保存的path参数指定的位置。

  1. 检查vmcore是否生成。

到所在环境path参数所指定的路径查看是否有vmcore文件生成,例如/var/crash/目录。

# ll /var/crash/

可以看到生成了一个文件夹,里面有vmcore文件。

文章来自个人专栏
博客
7 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0