Linux Kdump和Crash工具

Kdump

Kdump是一种基于kexec的Linux内核崩溃捕获机制,简单来说系统启动时会预留一块内存,当系统崩溃调用命令kexec(kdump kernel)在预留的内存中启动kdump内核,

该内核会将此时内存中的所有运行状态和数据信息收集到一个coredump文件中以便后续分析调试。

开启kdump

1. 设置crashkernel预留内存大小
[root@localhost ~]$ cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=256M rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

修改crashkernel的大小,我的系统内存是1G,保留了256M,注意预留内存大小,过小会导致生成coredump文件失败(不知道设置多少时,可以尝试每次增加128M)

修改后还需重新生成grub配置文件,重启系统才能生效

[vagrant@localhost ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
[vagrant@localhost ~]$ reboot
2. 修改kdump默认配置/etc/kdump.conf

centos7 默认已安装kdump,根据需要修改默认配置

[root@localhost ~]$ vi /etc/kdump.conf
path /var/crash #指定coredump文件存储位置
core_collector makedumpfile -c -l --message-level 1 -d 31 #增加-c参数,代表压缩coredump文件
default reboot #生成coredump后,重启系统
3. 开启kdump服务
systemctl start kdump.service //启动kdump
systemctl enable kdump.service //设置开机启动
4. 测试kdump功能 检查kdump是否开启成功
[root@localhost ~]# service kdump status
Redirecting to /bin/systemctl status kdump.service
● kdump.service - Crash recovery kernel armingLoaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)Active: active (exited) since Wed 2022-11-16 10:48:09 CST; 18s agoProcess: 1342 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS)Main PID: 1342 (code=exited, status=0/SUCCESS)CGroup: /system.slice/kdump.service
5. 手动触发crash
[root@cloud ~]# echo 1 > /proc/sys/kernel/sysrq ; echo c > /proc/sysrq-trigger
6. 查看生成的crash文件
[root@localhost ~]# ls /var/crash/
127.0.0.1-2022-11-16-11:11:43

crash解析数据原理

crash是工具,用于实现很多命令和解析方法,vmcore提供内存真实数据,vmlinux提供内核符号表,里面存了大量的全局变量地址和数据结构原理和代码等。 crash 根据你输入的命令去vmlinux中查找符号和地址,再去vmcore里面对应的位置获取真实数据,这样解析就完成了。

crash /var/crash/127.0.0.1-2022-11-16-11\:11\:43/vmcore /usr/src/kernels/linux-3.10.0-1160.71.1.el7/kernel/

常用命令和分析方法

1 bt 查看异常时的堆栈

堆栈执行的函数顺序是由大到小,#16是最开始执行的系统调用,一般#0是切换到crashkernel的执行。重点关注#10这个位置,打印出很多寄存器的地址, 标准的信息是 exception RIP表示出问题时候执行的指令。

crash> bt
PID: 2775   TASK: ffff892a78d0e180  CPU: 0   COMMAND: "bash"#0 [ffff892a78377ae0] machine_kexec at ffffffffa5663674#1 [ffff892a78377b40] __crash_kexec at ffffffffa571ce12#2 [ffff892a78377c10] crash_kexec at ffffffffa571cf00#3 [ffff892a78377c28] oops_end at ffffffffa5d6c758#4 [ffff892a78377c50] no_context at ffffffffa5d5aa7e#5 [ffff892a78377ca0] __bad_area_nosemaphore at ffffffffa5d5ab15#6 [ffff892a78377cf0] bad_area_nosemaphore at ffffffffa5d5ac86#7 [ffff892a78377d00] __do_page_fault at ffffffffa5d6f6b0#8 [ffff892a78377d70] do_page_fault at ffffffffa5d6f915#9 [ffff892a78377da0] page_fault at ffffffffa5d6b758[exception RIP: sysrq_handle_crash+22]RIP: ffffffffa5a61bf6  RSP: ffff892a78377e58  RFLAGS: 00010246RAX: ffffffffa5a61be0  RBX: ffffffffa62e4c60  RCX: 0000000000000000RDX: 0000000000000000  RSI: ffff892a7c613898  RDI: 0000000000000063RBP: ffff892a78377e58   R8: ffffffffa65e38bc   R9: 6873617263206120R10: 0000000000000726  R11: 0000000000000725  R12: 0000000000000063R13: 0000000000000000  R14: 0000000000000004  R15: 0000000000000000ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
#10 [ffff892a78377e60] __handle_sysrq at ffffffffa5a6241d
#11 [ffff892a78377e90] write_sysrq_trigger at ffffffffa5a62888
#12 [ffff892a78377ea8] proc_reg_write at ffffffffa58b7f30
#13 [ffff892a78377ec8] vfs_write at ffffffffa58410a0
#14 [ffff892a78377f08] sys_write at ffffffffa5841ebf
#15 [ffff892a78377f50] system_call_fastpath at ffffffffa5d74ddbRIP: 00007f6e64767ba0  RSP: 00007ffcaed61bb8  RFLAGS: 00000246RAX: 0000000000000001  RBX: 0000000000000002  RCX: ffffffffffffffffRDX: 0000000000000002  RSI: 00007f6e6508c000  RDI: 0000000000000001RBP: 00007f6e6508c000   R8: 000000000000000a   R9: 00007f6e6507d740R10: 00007f6e6507d740  R11: 0000000000000246  R12: 00007f6e64a40400R13: 0000000000000002  R14: 0000000000000001  R15: 0000000000000000ORIG_RAX: 0000000000000001  CS: 0033  SS: 002b

此时找到rip 我们可以找到rip的值dis -rl ffffffffa5a61bf6,执行命令:

dis -rl ffffffffa5a61bf6 dis是查看源码的命令

rip是最后一行:movb $0x1,0x0 表示把数字1赋值到地址0,地址0系统会判断为空指针,所以产生了panic,除此之外查看bt的打印,上面有write_sysrq_trigger函数,说明是我们手动echo c写sysrq-trigger触发的。

2 ps,log,set

ps:查看当前有哪些进程

log:查看系统日志

set:切换调试的进程上下文,比如ps查看一个进程,需要查看其他进程的上下文,set pid切换。

files:查看当前进程打开的文件

vm:当前进程使用的虚拟内存,VMA代表 vm_area_struct

参考文章:

  1. Centos7/RHEL7 开启kdump

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【服务器】安装Node.js开发环境

部署Node.js环境(使用NVM安装多个Node.js版本): NVM(Node VersionManager)是Node.js的版本管理软件,使您可以轻松在Node.js各个版本间进行切换。适用于长期做node开发的人员或有快速更新node版本、快速切换node版本的场景。 具体操作步骤如…

如何解决使用融云音视频时由于库冲突导致编译不通过的问题

音视频库里面使用了一些第三方库,比如 openssl,libopencore-amrnb 等第三方库,如果集成的过程中遇到冲突可以尝试这样修改: 1、在 Build Settings 中 Other Linker Flags 中把 -all_load 去掉; 2、如果遇到 openssl 库…

excel中找出重复项,并标红

一、查找重复值 二、清除格式 还是通过添加规则的路径,清除格式,直接通过格式刷,刷不掉。

Windows重装升级Win11系统后 恢复Mysql数据

背景 因为之前电脑硬盘出现问题,换了盘重装了系统,项目的数据库全部没了,还好之前的Mysql是安装在的D盘里,还有留存文件 解决办法 1.设置环境变量 我的路径是 D:\SoftWare\Application\mysql-5.7.35-winx64 此电脑右键属性 …

Java中如何使用SQLite数据库

目录 SQLite简介SQLite优势安装 SQLite基本使用Java使用SQLite Springboot使用SQLite1.添加依赖2.配置数据库3.创建实体类 4.创建Repository接口5.创建控制器6.运行应用程序 SQLite简介 SQLite 是一个开源的嵌入式关系数据库,实现了自给自足的、无服务器的、配置无…

基于SSM实现的社区论坛系统(附PPT、设计文档)

基于SSM实现的社区论坛系统(附PPT、设计文档) 文章目录 基于SSM实现的社区论坛系统(附PPT、设计文档)系统介绍技术选型成果展示设计文档用户端管理员端 源码获取账号地址及其他说明 系统介绍 基于SSM实现的社区论坛系统是一款前后…

pycharm远程开发调试(remote development)踩坑记录2

在一次我清理了服务器上一些老的pycharm版本之后 打算重新装3.2版本,就全部给清理了。结果坏了事了,新版的装不上了。 试了公司和中科院的服务器都出现这样的问题,100%复现。md。 一直在这一步循环: Downloading the IDE Backen…

echarts实现控制图(设置阈值上下限超出变色)

echarts实现控制图组件&#xff0c;拓展超出阈值变色显示&#xff0c;图中标记平均值及最大值和最小值 代码如下&#xff1a; <template><div :class"className" :style"{height:height,width:width}" /> </template><script>im…

基于Kettle开发的web版数据集成开源工具(data-integration)-介绍篇

目录 &#x1f4da;第一章 官网介绍&#x1f4d7;目标实现&#xff1a;让kettle使用更简单&#x1f4d7;架构及组成 &#x1f4da;第二章 核心功能&#x1f4da;第三章 对比Kettle&#x1f4d7;工具栏位比对&#x1f4d7;工具栏组件内容比对&#x1f4d7;扩展&#xff1a;WebSp…

多线程基础入门【Linux之旅】——下篇【死锁,条件变量,生产消费者模型,信号量】

目录 一&#xff0c;死锁 1. 死锁的必要条件 2&#xff0c;避免死锁 二&#xff0c;条件变量 同步概念与竞态条件 条件变量——初始化 静态初始化 动态初始化 pthread_cond_destroy (销毁) pthread_cond_wait (等待条件满足) pthread_cond_signal (唤醒线程) ph…

在Go语言中处理HTTPS请求

随着互联网的发展&#xff0c;安全性变得越来越重要。HTTPS作为安全的HTTP协议&#xff0c;已经被广泛使用。在Go语言中&#xff0c;处理HTTPS请求需要一些特定的步骤。本文将详细介绍如何在Go语言中处理HTTPS请求。 首先&#xff0c;确保你已经安装了Go语言的开发环境&#x…

10+免费图片素材/壁纸网站,搭一些图片处理工具,快收藏!

划到最后“阅读原文”——领取工具包&#xff08;超过1000工具&#xff0c;免费素材网站分享和行业报告&#xff09; Hi&#xff0c;我是胡猛夫~&#xff0c;专注于分享各类价值网站、高效工具&#xff01; 更多资源&#xff0c;更多内容&#xff0c;欢迎交流&#xff01;公 号…

threejs在透视相机模式下,绘制像素大小固定的元素

要求&#xff1a;在透视相机模式下绘制一个图标&#xff0c;图标大小始终为32*32px。图标如下&#xff1a; 实现思路&#xff1a; 使用THREE.Sprite。因为 SpriteMaterial 支持配置 sizeAttenuation 使Sprite大小不随相机的深度而衰减。所以我们只要保证sprite的初始的大小合适…

使用max()方法求最大值:

使用max()方法求最大值&#xff1a; 以下实例中我们使用max()方法求最大值&#xff1a; 实例(Python 3.0) # -*- coding: UTF-8 -*- # Filename : test.py # author by : www.dida100.com # 最简单的 print(max(1, 2)) print(max(a, b)) # 也可以对列表和元组使用 p…

SpringCloud之Eureka组件工作原理详解

Eureka是一种服务注册与发现组件&#xff0c;最初由Netflix开发并开源出来。它主要用于构建分布式系统中的微服务架构&#xff0c;并提供了服务注册、服务发现、负载均衡等功能。在本文中&#xff0c;我们将详细解释Eureka的工作原理。 一、Eureka概述 Eureka是Netflix开源的一…

SAFe大规模敏捷企业级实训

课程简介 SAFe – Scaled Agile Framework是目前全球运用最广泛的大规模敏捷框架&#xff0c;也是成长最快、最被认可、最有价值的规模化敏捷框架&#xff0c;目前全球SAFe认证专业人士已达80万人&#xff0c;福布斯100强的70%都在实施SAFe。本课程是一个2天的 SAFe权威培训课…

老生常谈:Web 与低代码开发

Web技术和低代码平台是当前技术领域中的两个热门话题。它们在应用开发领域中扮演着重要的角色&#xff0c;不断被提及和讨论。本文将讨论为什么“Web与低代码”这个话题成为了“老生常谈”&#xff0c;探讨其背后的原因以及这两个概念的关系。 在当今技术飞速发展的时代&#x…

Git使用以及推送代码到Github

Git使用以及推送代码到GithubGIT使用 创建Github账户。打开 https://github.com 并注册一个新账户。 安装Git。如果您的系统尚未安装Git&#xff0c;则需要先安装它。可以参考Git官方文档以获取更多详细信息。 配置Git用户名和电子邮件地址。在终端或命令提示符窗口中&#x…

【UWB定位源码】工厂企业人员定位系统源码,实现安全区域管控、人员在岗监控、车辆实时轨迹监控

UWB高精度定位系统源码&#xff0c;企业工厂人员定位系统源码 概念&#xff1a; UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术&#xff0c;它不采用正弦载波&#xff0c;而是利用纳秒级的非正弦波窄脉冲传输数据&#xff0c;因此其所占的频谱范围很宽。 UWB的主要特…

摩擦纳米发电机测试整套解决方案(发电机+采集卡+软件)-升级版/高频率运动版

本测试系统为纳米发电机测试&#xff0c;可结合KEITHLEY 6514或者6517进行纳米发电测试&#xff0c;电压、电流 、电阻、电荷随时间的变化&#xff0c;搭配DAQ数据采集卡&#xff0c;可高速采集数据的变化&#xff0c;如NI USB 6002 最高采样速度可达50K&#xff0c;6003最高采…