Crash的简单学习
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命令可以用来打印出表达式或者变量的值
Crash的简单学习的更多相关文章
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- shiro简单学习的简单总结
权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...
- CentOS 简单学习 firewalld的使用
1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...
- Windows 下 Docker 的简单学习使用过程之一 dockertoolbox
1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...
- 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习
嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...
- Linux——帮助命令简单学习笔记
Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...
- OI数学 简单学习笔记
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...
- mongodb,redis简单学习
2.mongodb安装配置简单学习 配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作 ...
- html css的简单学习(三)
html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...
- html css的简单学习(二)
html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...
随机推荐
- DevOps|我们需要什么样的产研项目管理工具
上一篇文章<DevOps|产研运协作工具链上的皇冠-项目管理工具>主要讲了项目管理工具对软件研发的重要性,本篇文章主要想讲清楚我们需要什么样的项目管理工具,项目管理工具必须具备的功能有哪些 ...
- 浏览器工作原理和实践(二)——JavaScript
<浏览器工作原理与实践>是极客时间上的一个浏览器学习系列,在学习之后特在此做记录和总结. 一.执行流程 实际上变量和函数声明在代码里的位置是不会改变的,而且是在编译阶段被 JavaScri ...
- 使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能
本文分享自华为云社区<使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能>,作者:云容器大未来. AI 技术现状及发展趋势 过去十余年,依托全球数据.算法 ...
- 华为云 UCS (On-Premises):运行在您本地数据中心的CCE集群
摘要:华为云分布式云原生UCS服务,是面向分布式云场景下的新一代云原生产品,提供UCS (Huawei Cloud).UCS (Partner Cloud).UCS (Multi-Cloud).UCS ...
- 带你了解Node.js包管理工具:包与NPM
摘要:包与NPM Node组织了自身的核心模块,也使得第三方文件模块可以有序的编写和使用. 本文分享自华为云社区<NodeJs深入浅出之旅:包与NPM>,作者:空城机. 包与NPM Nod ...
- 带你掌握二进制SCA检测工具的短板及应对措施
摘要:本文针对二进制SCA检测技术短板所面临的一些特殊场景.检测影响及应对措施进行详细分析和说明,希望对使用二进制SCA检测工具的测试和研发人员有所帮助. 本文分享自华为云社区<二进制SCA检测 ...
- WebKit三件套(2):WebKit之JavaScriptCore/V8
WebKit作为一个浏览器引擎,其中Javascript实现包括JavaScriptCore和V8,为了能更全面的了解WebKit,我们需要深入的了解Javascript实现的基本原理.其在WebKi ...
- vue2升级vue3:TypeScript下vuex-module-decorators/vuex-class to vuex4.x
因为vue2 下 vue-property-decorator + vue-tsx-support +vuex-module-decorators/vuex-class ,class compone ...
- appuploader使用教程
appuploader使用教程 转载:appuploader使用教程 目录 问题解决秘籍 登录失败 don't have access,提示没权限或同意协议 上传后在app管理中心找不到版本提交 ...
- Java 事件链
Java中的事件机制的参与者有3种角色: 1. event object:就是事件产生时具体的"事件",用于listener的相应的方法之中,作为参数,一般存在于listerner ...