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 ...
随机推荐
- C++篇:第十章_命名空间_知识点大全
C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 十.命名空间 命名空间可以在全局作用域或其他命名空间内部定义,但不能在函数.结构 ...
- Prometheus配置Basic Auth进行安全防护,实现登录控制
本文分享自华为云社区<Prometheus配置Basic Auth进行安全防护,实现登录控制>,作者:可以交个朋友. 一.Prometheus Basic Auth 使用背景 在日常pro ...
- 30秒,2种方法解决SQL Server的内存管理问题
今天和大家聊一聊SQL server的内存管理,说之前我们需要先提出一个问题,SQL Server到底是如何使用内存的?弄清楚如何使用之后,才能谈如何管理. 简单说,SQL Server 数据库的内存 ...
- FusionInsight MRS Flink DataStream API读写Hudi实践
摘要:目前Hudi只支持FlinkSQL进行数据读写,但是在实际项目开发中一些客户存在使用Flink DataStream API读写Hudi的诉求. 本文分享自华为云社区<FusionInsi ...
- 火山引擎 DataTester:“在字节,A/B 实验是一种信仰”
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 进入数字经济时代,要用数据驱动业务增长已经成为各个行业的共识,但很多企业还没能真正掌握这项能力.如何最大限度转化数据价值, ...
- Solon2 之基础:四、应用启动过程与完整生命周期
串行的处理过程(含六个事件扩展点 + 两个函数扩展点),代码直接.没有什么模式.易明 提醒: 启动过程完成后,项目才能正常运行(启动过程中,不能把线程卡死了) AppBeanLoadEndEvent ...
- vue 基础学习 一
1. vue 使用快速入门三步走 (1) 新建 HTML 页面,引入 Vue.js文件 <!DOCTYPE html> <html> <head> <meta ...
- 股票数据爬虫进阶:免费、开源的股票爬虫Python库,实测真香
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 免费.开源的股票爬虫Python库:Easyquotation 我们在此前的文章中,向大家分享了如何用P ...
- 【cJSON】轻量级的C语言JSON解析器
C++ 进阶版:[CJsonObject]C++ JSON 解析器使用教程 1. JSON与cJSON JSON -- 轻量级的数据格式 JSON 全称 JavaScript Object Notat ...
- vivo 全球商城:订单中心架构设计与实践
一.背景 随着用户量级的快速增长,vivo 官方商城 v1.0 的单体架构逐渐暴露出弊端:模块愈发臃肿.开发效率低下.性能出现瓶颈.系统维护困难. 从2017年开始启动的 v2.0 架构升级,基于业务 ...