Crash的简单学习


前言

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

kdump的简介

  1. kdump 应该是linux为了进行问题定位的一个内核转储机制.
  2. 他的方式为,在内核出现宕机或者是panic时有一个抓取内存映象的内核进程
  3. 将生产内核的核心内存dump出来. 便于宕机后的事故分析.
  4. 默认的存储位置是
  5. /var/crash/$date_time/vmcore
  6. 可以使用 crash的命令进行解析, 需要注意的是需要使用 debug版本的vmlinux进行相关动作.

环境准备

  1. 需要安装几个必备的软件:
  2. yum install crash kexec-tools -y
  3. 开启kdump的服务
  4. systemctl enable kdump && systemctl start kdump
  5. 注意需要下载一个对应内核的 debug rpm包. 麒麟的下载地址为:
  6. https://update.cs2c.com.cn/NS/V10/V10SP3/os/adv/lic/updates/x86_64/debug/
  7. 注意注意 麒麟的SP1以及SP2SP3的位置其实都不一样.
  8. uname -a 获取内核信息进行下载就可以了.
  9. 注意 银河麒麟的debug kernel的位置为:
  10. /usr/lib/debug/usr/lib/modules/
  11. 需要说明. 如果内核升级了,需要重新下载新的debug kernel.不然无法解析.

触发宕机

  1. # 注意千万不要用于生产, 会直接导致宕机.
  2. echo 1 > /proc/sys/kernel/sysrq
  3. echo c > /proc/sysrq-trigger
  4. # 重要事情说三遍, 不要用于生产
  5. # 重要事情说三遍, 不要用于生产

使用命令进行分析

  1. crash /usr/lib/debug/usr/lib/modules/xxxx/vmlinux /var/crash/xxxx/vmcore
  2. 执行 bt 命令 可以查看堆栈信息
  3. 据说bt 命令的含义是 back trace -=
  4. 13723.534444] sysrq: Trigger a crash
  5. [13723.534461] BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
  6. [13723.534463] PGD 0 P4D 0
  7. [13723.534469] Oops: 0002 [#1] SMP NOPTI
  8. [13723.534473] CPU: 91 PID: 498332 Comm: bash Kdump: loaded Not tainted 4.19.90-52.15.v2207.ky10.x86_64 #1
  9. [13723.534475] Source Version: e17111569035580c1da88ed44f96cbdcf3390e0c
  10. [13723.534477] Hardware name: Inspur CS5280H/CS5280H, BIOS 3.3.48 2022-10-20
  11. [13723.534487] RIP: 0010:sysrq_handle_crash+0x12/0x20
  12. [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
  13. [13723.534491] RSP: 0018:ffffbc5e68717e70 EFLAGS: 00010286
  14. [13723.534493] RAX: ffffffffb4392000 RBX: 0000000000000063 RCX: 0000000000000000
  15. [13723.534494] RDX: 0000000000000000 RSI: ffff95827fcd6968 RDI: 0000000000000063
  16. [13723.534496] RBP: ffffffffb539bf20 R08: 00000000000009a9 R09: 0000000000000007
  17. [13723.534497] R10: 0000000000000000 R11: ffffffffb5ccf6b2 R12: 0000000000000004
  18. [13723.534498] R13: 0000000000000000 R14: 0000556ea72ff410 R15: 0000000000000000
  19. [13723.534500] FS: 00001517cb5c1740(0000) GS:ffff95827fcc0000(0000) knlGS:0000000000000000
  20. [13723.534502] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
  21. [13723.534503] CR2: 0000000000000000 CR3: 0000004080dd0000 CR4: 00000000003406e0
  22. [13723.534504] Call Trace:
  23. [13723.534511] __handle_sysrq+0x78/0x130

宕机命令解析-1

  1. sysrq 其实是一个组合键, 只要内核不会完全死掉,就会打印出来特定的信息
  2. 打开这个功能,运行:
  3. echo 1 > /proc/sys/kernel/sysrq
  4. 关闭这个功能:
  5. echo 0 > /proc/sys/kernel/sysrq
  6. 如果想让此功能一直生效,在/etc/sysctl.conf里面设置kernel.sysrq的值为1。重新启动以后,此功能将会自动打开。
  7. kernel.sysrq = 1
  8. 但是需要注意, 打开这个操作有一个的风险.

宕机命令解析-2

  1. 立即重新启动计算机
  2. echo b > /proc/sysrq-trigger
  3. 立即关闭计算机
  4. echo o > /proc/sysrq-trigger
  5. 导出内存分配的信息 (可以用/var/log/message 查看)
  6. echo m > /proc/sysrq-trigger
  7. 导出当前CPU寄存器信息和标志位的信息
  8. echo p > /proc/sysrq-trigger
  9. 导出线程状态信息
  10. echo t > /proc/sysrq-trigger
  11. 故意让系统崩溃
  12. echo c > /proc/sysrq-trigger
  13. 立即重新挂载所有的文件系统
  14. echo s > /proc/sysrq-trigger
  15. 立即重新挂载所有的文件系统为只读
  16. echo u > /proc/sysrq-trigger

crash 命令学习

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

Crash的简单学习的更多相关文章

  1. Log4j简单学习笔记

    log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...

  2. shiro简单学习的简单总结

    权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...

  3. CentOS 简单学习 firewalld的使用

    1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...

  4. Windows 下 Docker 的简单学习使用过程之一 dockertoolbox

    1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...

  5. 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习

    嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...

  6. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  7. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  8. mongodb,redis简单学习

     2.mongodb安装配置简单学习                   配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作                 ...

  9. html css的简单学习(三)

    html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...

  10. html css的简单学习(二)

    html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...

随机推荐

  1. 在线编辑Word——插入公式

    在Word中可插入多种公式,用于满足于不同运算场景需求,从基本的运算符到大型的运算公式,我们可以根据文档内容的编排需要,任意插入所需公式.下面,介绍如何通过在线编辑Word的方式,向Word中插入公式 ...

  2. 4大焕新,华为云CCE带你感受容器化上云体验

    本文分享自华为云社区<华为云CCE邀您共同打造最佳容器化上云体验>,作者:云容器大未来 . 在容器化日益成为中大型企业上云主流选择的情况下,容器服务如何能帮助用户更简单快捷的上云.高效可信 ...

  3. GaussDB(DWS)迁移:一种执行高效的TereData的marco迁移方案

    摘要:提供一种执行高效的TereData的marco迁移方案. 本文分享自华为云社区<GaussDB(DWS)迁移 - teredata兼容 -- macro兼容 # [玩转PB级数仓Gauss ...

  4. 如何处理分析Flink作业反压的问题?

    摘要:反压是 Flink 应用运维中常见的问题,它不仅意味着性能瓶颈还可能导致作业的不稳定性. 反压(backpressure)是实时计算应用开发中,特别是流式计算中,十分常见的问题.反压意味着数据管 ...

  5. 后CNN探索,如何用RNN进行图像分类

    摘要:RNN可以用于描述时间上连续状态的输出,有记忆功能,能处理时间序列的能力,让我惊叹. 本文分享自华为云社区<用RNN进行图像分类--CNN之后的探索>,作者: Yin-Manny. ...

  6. 关于 DataLeap 中的 Notebook,你想知道的都在这

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 DataLeap 是火山引擎数智平台 VeDI 旗下的大数据研发治理套件产品,帮助用户快速完成数据集成.开发.运维 ...

  7. PPT 动画-多层旋转(圆角三角形)

    多层旋转动画 插入若干个三解形 然后将页面切换成[平滑](Office 2019~ 365 才有这功能,或者 iSlide 平滑过渡)

  8. 用Python制作高逼格数学动画manim

    简介 manim是斯坦福大学数学系小哥Grant Sanderson开源的数学仿真模拟python库,并用于YouTube 频道3Blue1Brown,来解说高等数学. manim是一个非常优秀的数学 ...

  9. 使用Expression代替反射读取IDataReader或IDataRecord给实体类赋值

    ExpressionMapper代码 using System; using System.Collections.Concurrent; using System.Collections.Gener ...

  10. 【每日一题】12.Running Median (对顶堆)

    补题链接:Here 题意:动态的维护中位数的问题,依次读入一个整数,每当总个数为奇数时输出此时序列的中位数 使用对顶堆的在线做法. 为了实时找到中位数,我们可以建议两个二叉堆:一个小根堆.一个大根堆. ...