首页 > 其他分享 >Crash的简单学习

Crash的简单学习

时间:2023-04-29 09:44:26浏览次数:34  
标签:00 Crash echo 学习 trigger sysrq 简单 proc 内核

Crash的简单学习


前言

最近进行海光服务器的压测, 多次出现了压测时宕机的情况. 
跟OS,DB还有hardware的vender都进行过沟通, 但都比较难定位具体问题. 
麒麟操作系统说需要进行一下vmcore的确认.
这边也获取了一下麒麟的文档. 想着自己总结一下问题. 便于以后查询

kdump的简介

kdump 应该是linux为了进行问题定位的一个内核转储机制.
他的方式为,在内核出现宕机或者是panic时有一个抓取内存映象的内核进程
将生产内核的核心内存dump出来. 便于宕机后的事故分析. 
默认的存储位置是
/var/crash/$date_time/vmcore

可以使用 crash的命令进行解析, 需要注意的是需要使用 debug版本的vmlinux进行相关动作.

环境准备

需要安装几个必备的软件:
yum install crash  kexec-tools -y 

开启kdump的服务
systemctl enable kdump && systemctl start kdump 

注意需要下载一个对应内核的 debug 的rpm包. 麒麟的下载地址为:
https://update.cs2c.com.cn/NS/V10/V10SP3/os/adv/lic/updates/x86_64/debug/
注意注意 麒麟的SP1以及SP2和SP3的位置其实都不一样.
uname -a 获取内核信息进行下载就可以了. 

注意 银河麒麟的debug 的kernel的位置为:
/usr/lib/debug/usr/lib/modules/
需要说明. 如果内核升级了,需要重新下载新的debug kernel.不然无法解析. 

触发宕机

# 注意千万不要用于生产, 会直接导致宕机. 

echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger

# 重要事情说三遍, 不要用于生产
# 重要事情说三遍, 不要用于生产

使用命令进行分析

crash /usr/lib/debug/usr/lib/modules/xxxx/vmlinux /var/crash/xxxx/vmcore

执行 bt 命令 可以查看堆栈信息
据说bt 命令的含义是 back trace -=


13723.534444] sysrq: Trigger a crash
[13723.534461] BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
[13723.534463] PGD 0 P4D 0 
[13723.534469] Oops: 0002 [#1] SMP NOPTI
[13723.534473] CPU: 91 PID: 498332 Comm: bash Kdump: loaded Not tainted 4.19.90-52.15.v2207.ky10.x86_64 #1
[13723.534475] Source Version: e17111569035580c1da88ed44f96cbdcf3390e0c
[13723.534477] Hardware name: Inspur CS5280H/CS5280H, BIOS 3.3.48 2022-10-20
[13723.534487] RIP: 0010:sysrq_handle_crash+0x12/0x20
[13723.534489] Code: 5d 41 5e 41 5f e9 fe 99 be ff 48 89 ef e8 76 fb ff ff e9 ae fe ff ff 90 0f 1f 44 00 00 c7 05 c5 2e eb 00 01 00 00 00 0f ae f8 <c6> 04 25 00 00 00 00 01 c3 0f 1f 44 00 00 0f 1f 44 00 00 53 8d 5f
[13723.534491] RSP: 0018:ffffbc5e68717e70 EFLAGS: 00010286
[13723.534493] RAX: ffffffffb4392000 RBX: 0000000000000063 RCX: 0000000000000000
[13723.534494] RDX: 0000000000000000 RSI: ffff95827fcd6968 RDI: 0000000000000063
[13723.534496] RBP: ffffffffb539bf20 R08: 00000000000009a9 R09: 0000000000000007
[13723.534497] R10: 0000000000000000 R11: ffffffffb5ccf6b2 R12: 0000000000000004
[13723.534498] R13: 0000000000000000 R14: 0000556ea72ff410 R15: 0000000000000000
[13723.534500] FS:  00001517cb5c1740(0000) GS:ffff95827fcc0000(0000) knlGS:0000000000000000
[13723.534502] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[13723.534503] CR2: 0000000000000000 CR3: 0000004080dd0000 CR4: 00000000003406e0
[13723.534504] Call Trace:
[13723.534511]  __handle_sysrq+0x78/0x130


宕机命令解析-1

sysrq 其实是一个组合键, 只要内核不会完全死掉,就会打印出来特定的信息

打开这个功能,运行:
echo 1 > /proc/sys/kernel/sysrq
关闭这个功能:
echo 0 > /proc/sys/kernel/sysrq
如果想让此功能一直生效,在/etc/sysctl.conf里面设置kernel.sysrq的值为1。重新启动以后,此功能将会自动打开。
kernel.sysrq = 1


但是需要注意, 打开这个操作有一个的风险. 

宕机命令解析-2

立即重新启动计算机
echo “b” > /proc/sysrq-trigger
立即关闭计算机
echo “o” > /proc/sysrq-trigger
导出内存分配的信息 (可以用/var/log/message 查看)
echo “m” > /proc/sysrq-trigger
导出当前CPU寄存器信息和标志位的信息
echo “p” > /proc/sysrq-trigger
导出线程状态信息
echo “t” > /proc/sysrq-trigger
故意让系统崩溃
echo “c” > /proc/sysrq-trigger
立即重新挂载所有的文件系统
echo “s” > /proc/sysrq-trigger
立即重新挂载所有的文件系统为只读
echo “u” > /proc/sysrq-trigger

crash 命令学习

1. bt
backtrace打印内核栈回溯信息,bt pid 打印指定进程栈信息。
2. log
打印vmcore所在的系统内核dmesg日志信息
3. dis
dis -l (function+offset) 10 反汇编出指令所在代码,10代表打印该指定位置开始的10行信息。
4. mod
mod 查看当时内核加载的所有内核模块信息
5. sym命令
“sym 内存地址”转换指定符号为其虚拟地址,显示系统中对应的符号表信息,并且具体到源代码的那一行
6. ps命令
ps 打印内核崩溃时,正常的进程信息
7. files命令
files pid 打印指定进程所打开的文件信息
8. vm命令
vm pid 打印某指定进程当时虚拟内存基本信息
9. task命令
task 查看当前进程或指定进程task_struct和thread_info的信息
10.kmem命令
查看当时系统内存使用信息
kmem -i         //查看内存整体使用情况
kmem -s        //查看slab使用情况
kmem [addr]   //搜索地址所属的内存结构
11. rd命令
读取内存内容
rd [addr] [len]                  //查看指定地址,长度为len的内存
rd -S [addr][len]               //尝试将地址转换为对应的符号
rd [addr] -e [addr]            //查看指定内存区域内容
12. p命令
p命令可以用来打印出表达式或者变量的值

标签:00,Crash,echo,学习,trigger,sysrq,简单,proc,内核
From: https://www.cnblogs.com/jinanxiaolaohu/p/17362270.html

相关文章

  • 于是他迟到的组合数学学习开始了
    加法原理完成一件事,有\(m\)类方法,对于每类方法有\(s_i\)个方案,则此时总方案数就是\(\sum_{i=1}^ms_i\)。乘法原理完成一件事,有\(n\)个步骤,对于每个步骤有\(s_i\)个方案,则此时总方案数就是\(\prod_{i=1}^ns_i\)。排列从\(n\)个数中选出\(m\)个数的一个排列,记......
  • 「学习笔记」重修生成树
    最小生成树(MinimumSpanningTree,MST)为边权和最小的生成树。算法Kruskal算法实现将所有的边按边权从小到大排序,然后用并查集维护一条边所连接的两个点是否已联通(不能形成环)。intfind(intx){ returnfa[x]==x?fa[x]:fa[x]=find(fa[x]);}llkruskal(){ ll......
  • 【数据挖掘&机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图
    一.本次需求背景本文主题:招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解之前的文章我们已经对爬取的数据做了清洗处理,然后又对其数据做了一个薪资数据的倾斜情况以及盒图离群点的探究。我们这次的需求是:使用散点图、使用......
  • 【数据预处理&机器学习】对于薪资数据的倾斜情况以及盒图离群点的探究
    一.需求背景课题中心:招聘网站的职位招聘数据预处理之前的文章,我们已经对职位薪资数据进行了爬取(9000条)数据,然后进行了数据的清洗,最终得到了4000条有效数据。具体需求:按不同的类别划分职位中的薪酬数据,画盒图/箱线图,检查孤立点/离群点;使用分位数图、分位数-分位数图方法处理数......
  • Vulhub 漏洞学习之:Strust2
    Vulhub漏洞学习之:Strust2目录Vulhub漏洞学习之:Strust21S2-001远程代码执行漏洞1.1环境安装1.2漏洞利用过程1.3GetShell2S2-005远程代码执行漏洞环境2.1环境安装2.2漏洞利用过程2.3GetShell3S2-007远程代码执行漏洞3.1环境安装3.2漏洞利用过程3.3GetShell4S2-0......
  • sklearn中的KFold简单介绍
    这一部分主要讲解关于什么是K-foldCV(K折交叉验证),简单的使用一些案例进行分析,然后使用sklearn库函数中一些简单的案例进行分析。在机器学习中,多数最主要的功能函数被封装到sklearn的库函数中,model_selection类中包含了K-foldCV的简单使用,可以直接使用这个进行调用。一.关于K-Fold......
  • 简单控制的无限级菜单代码(ie)
    <style>.menu_right{position:absolute;display:none;border:1pxsolid#808080;color:black;background:#d4d0c8;font-size:13px;font-family:'宋体';padding:2px2px2px2px;top:3px;left:3px;}.menu_righta{white-space:......
  • 「学习笔记」重修最短路
    \(u\)到\(v\)的最短路径的长度就是\(u\)到\(v\)的最短路。单源最短路算法可以求出一个点到其他点的最短路。全源最短路算法可以求出每一个点到其他各点的最短路。松弛操作:dis[v]=min(dis[v],dis[u]+w);。算法Floyd算法全源最短路算法,时间复杂度\(O_{n^3}\),......
  • 【深度学习基础】使用libtorch部署pytorch训练的网络
    下载安装配置:https://pytorch.org/cppdocs/installing.html小例程:https://pytorch.org/cppdocs/frontend.html官方:https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.htmllibtorch的API官网文档:https://pytorch.org/cppdocs/api/library_root.html配置环......
  • [笔记] ELMO, BERT, GPT 简单讲解 - 李宏毅
    国内视频地址:https://www.bilibili.com/video/BV17441137fa/?spm_id_from=333.880.my_history.page.click&vd_source=bda72e785d42f592b8a2dc6c2aad24091NLP基础1.1词的表示过程演进:one-hot编码词袋模型wordembedding1.2multiplesense1)明确两个概念:token和ty......