中移(苏州)软件技术有限公司面试问题与解答(8)—— coredump与vmcore(2)

Linux 内核调试方法接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(8)—— coredump与vmcore(1)

本文参考以下文章:

vmcore分析和实战

内核vmcore文件分析方法

crash工具分析Kdump下vmcore文件常用命令总结(三)(实例易懂)

vmcore

特此致谢!

本文对于中移(苏州)软件技术有限公司面试问题中的“(13)实际工作中有没有使用core dump进行调试以及问题定位?core dump的具体机制是什么?”进行解答与解析。

上一回讲了coredump,本回讲一下与coredump密切相关的vmcore。

1. 什么是vmcore

vmcore是一个操作系统在内存崩溃时保存的核心转储文件。它包含了操作系统、内核和进程的状态信息,可以对故障进行分析和调试。vmcore就像一本黑匣子,为我们提供了查看故障现场的途径,让我们能够快速定位和解决问题。

Linux内核在运行过程中,总会由于硬件异常、驱动异常或者用户态程序等等原因导致coredump,从而转储vmcore文件。而coredump发生后,我们如何去分析coredump产生的原因,成为了维护内核工作的重点。

从vmcore的定义和上一回core文件的说明就能看出,vmcore文件其实就是上一回说的那个core文件(当然,具体名字可以设定)。我说面试这帮人老是一会说ccoredump、一会又说vmcore呢。

2. 开启coredump转储

现代Linux系统中,默认都开启了内核coredump转储功能。我们可以通过ulimit -c命令进行确认。如果ulimit -c显示为0,证明被关闭(限制core文件的大小为0,意为不转储),我们可以设置为unlimited。

ulimit -c unlimited

其实这一部分上一回已经详细讲解过了,在此不再赘述。

3. coredump的常用分析工具

(1)所需要的东西

首先得知道分析内核需要什么,其实我们需要以下3样东西:

1)crash工具

2)coredump转储的文件,即vmcore文件(看到这俩的关系了吧);

3)发生崩溃的内核映像文件,即vmlinux文件(虽然boot目录下也有vmliunz-xxx文件,但是boot下的这个文件被压缩过,不包含我们调试需要的信息,所以无法用它来进行调试工作),这里包含了调试内核所需要的调试信息(和我们调试程序时添加-g参数编出来的文件相似)

(2)安装分析coredump所需的包

系统中一般不会预装crash工具和内核debug包,因此要分析内核的vmcore文件,需要先安装以下包:

  • crash

通过apt下载安装crash工具。实际命令及结果如下:

$ sudo apt install crash
[sudo] password for ph: 
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Suggested packages:
  kexec-tools makedumpfile
The following NEW packages will be installed:
  crash
0 upgraded, 1 newly installed, 0 to remove and 26 not upgraded.
Need to get 4,165 kB of archives.
After this operation, 12.4 MB of additional disk space will be used.
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy/main amd64 crash amd64 8.0.0-1ubuntu1 [4,165 kB]
Fetched 4,165 kB in 0s (8,941 kB/s)
Selecting previously unselected package crash.
(Reading database ... 266385 files and directories currently installed.)
Preparing to unpack .../crash_8.0.0-1ubuntu1_amd64.deb ...
Unpacking crash (8.0.0-1ubuntu1) ...
Setting up crash (8.0.0-1ubuntu1) ...
Processing triggers for man-db (2.10.2-1) ...
  • kernel-debuginfo

通过apt下载安装kernel-debuginfo。实际命令及结果如下:

ph@ph-virtual-machine:~$ sudo apt install kernel-debuginfo
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package kernel-debuginfo

出错了,为什么会报错?

因为kernel-debuginfo就是分析之前需要安装系带有debug-info的内核。kernel-debuginfo是redhat 的叫法,Ubuntu下叫作debug symbols,简称dbgsym。与kernel-debuginfo一样,Ubuntu默认安装时也不会安装dbgsym,但更坏的消息是,Ubuntu默认仓库上也没有dbgsym包。dbgsym包存在于独立的仓库上,官方仓库地址为:http://ddebs.ubuntu.com/,页面如下:

版本应该和系统运行的内核版本完全一致。

安装完成后,会在/usr/lib/debug/boot/目录下生成带有调试信息的vmlinux;也有一说在系/lib/debug/lib/modules/xxx(内核版本)/下生成带有调试信息的vmlinux文件。

注:这一步笔者没有亲自尝试。

3. crash命令的用法说明

注:以下各步骤均非笔者实际操作,只是为了了解相关知识。

(0)进入crash环境

[root@localhost /]# crash /lib/debug/lib/modules/3.10.0.el7.x86_64/vmlinux /var/crash/127.0.0.1-2022-05-06-17\:25\:34/vmcore

GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu"...

      KERNEL: /boot/vmlinux                     
    DUMPFILE: /var/crash/127.0.0.1-2022-05-06-17:25:41/vmcore  [PARTIAL DUMP]
        CPUS: 8
        DATE: Fri May 06 17:25:34 2022
      UPTIME: 00:34:45
LOAD AVERAGE: 3.37, 3.71, 3.38
       TASKS: 1316
    NODENAME: fe0fdb76-b761-11e9-b107-0014101e89e7
     RELEASE: 3.10.0+
     VERSION: #1 SMP Thu Dec 24 16:27:16 CST 2020
     MACHINE: x86_64  (3408 Mhz)
      MEMORY: 31.9 GB
       PANIC: "SysRq : Trigger a crash"
         PID: 1942
     COMMAND: "bash"
        TASK: ffff88068c957300  [THREAD_INFO: ffff88062b8f4000]
         CPU: 2
       STATE: TASK_RUNNING (SYSRQ)

针对于上边各项的说明如下: 

 KERNEL:指明crash时运行的kernel
 DUMPFILE:转储的内存core文件名称
 CPUS:机器上cpu个数
 DATE:crash发生的时间.
 TASKS:crash时内存中运行任务的数量  
 NODENAME:crash的主机名
 RELEASE:and VERSION:kernel的版本号
 MACHINE:机器的cpu架构
 MEMORY:机器的内存大小
 PANIC:系统panic类型。如:Oops、soft lockup、hard lockup、oom、hung task等
 PID:触发panic的进程ID
 COMMAND:触发panic的进程名称,此处为swapper
 TASK:问题进程地址
 CPU:crash时进程运行的当前cpu号
 STATE:crash时进程的运行状态

(1)bt命令

backtrace,打印内核栈信息。

bt pid打印指定进程栈信息。

上边最重要的信息是:[exception RIP: sysrq_handle_crash+22],指出发生异常的指令信息为:

RIP: ffffffffa54627a6。

由此可知,发生crash的函数是在sysrq_handle_crash中,偏移22字节处的指令。

这里,对应x86-64汇编,应用层下来的系统调用对应的6个参数存放的寄存器依次对应:rdi、rsi、rdx、rcx、r8、r9。对于多于6个参数的,仍存储在栈上。

crash命令的更多介绍请看下回。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

重磅!讯飞星火V3.5正式发布,3大核心能力超GPT-4 Turbo!

1月30日&#xff0c;科大讯飞召开星火认知大模型V3.5升级发布会&#xff0c;这是国内首个基于全国产算力训练的多模态认知大模型。科大讯飞董事长刘庆峰先生、研究院院长刘聪先生出席了大会&#xff0c;并对最新产品进行了多维度解读。 讯飞星火V3.5的7大核心能力实现全面大幅…

数据结构:图文详解 搜索二叉树(搜索二叉树的概念与性质,查找,插入,删除)

目录 搜索二叉树的相关概念和性质 搜索二叉树的查找 搜索二叉树的插入 搜索二叉树的删除 1.删除节点只有右子树&#xff0c;左子树为空 2.删除节点只有左子树&#xff0c;右子树为空 3.删除节点左右子树都不为空 搜索二叉树的完整代码实现 搜索二叉树的相关概念和性质 …

LeetCode: 189.轮转数组

本篇目标了解&#xff0c;翻转数组的经典解法&#xff0c; 189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 目录 基本方法概述&#xff1a; 1&#xff0c;翻转做法&#xff0c;推荐时O&#xff08;n&#xff09;&#xff0c;空&#xff08;1&#xff09; 2&#x…

喜讯 | 经纬恒润整车电子电气测试实验室通过一汽研发总院外部实验室资质认证!

近日&#xff0c;经纬恒润整车电子电气测试实验室成功通过中国一汽研发总院的资质评定&#xff0c;获得外部实验室认可证书。这是继经纬恒润测试实验室获得一汽智能网联开发院车载以太网测试资质认证之后的又一次认可&#xff0c;它将拓宽经纬恒润与红旗新能源及相关零部件供应…

windows pm2 执行 npm脚本或执行yarn脚本遇到的问题及解决方案

环境&#xff1a; 在windows上启动终端来运行一个项目&#xff1b;通过指令npm run start来启动&#xff0c;但是将终端一关&#xff0c;就无法访问了&#xff0c;所以想到用pm2来管理 1. 全局安装pm2 npm i pm2 -g2. 在项目根目录执行指令(大部分兄弟的错误使用方法) pm2 st…

docker私有库

1.registry私有仓库 拉取registry镜像 docker pull registry 修改docker配置文件并重启 vim /etc/docker/daemon.json {"insecure-registries": ["172.16.23.23:5000"], #添加&#xff0c;注意用逗号结尾"registry-mirrors": ["ht…

阿赵UE学习笔记——14、LOD

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法。这次看看虚幻引擎的Level Of Detail(LOD)的用法。 一、测试场景准备 用植物系统&#xff0c;在地形上面刷了好多草&#xff1a; 这个时候看一下网格&#xff0c;会发现网格比较多和密集。 …

免费AI写作网站,AI人工智能写作gpt+在线AI绘画midjourney国内版

大家可以通过收藏网页www.woka.chat 直接进行访问&#xff0c;也可通过关注新公众号实现微信端使用~ 注册赠送大量额度&#xff0c;可用于网站全部功能&#xff08;问答和绘画&#xff09;&#xff01;每天签到也可领取充足使用额度&#xff01; 废话不多说&#xff0c;我们现…

【android】 android->profile 查看内存泄露

目录 实例讲解 各字段解释 实例讲解 各字段解释 在 Android Studio 的 Profile 视图中&#xff0c;Arrange by Stack 用于对内存分配和释放事件进行堆栈排列&#xff0c;以便更好地了解内存使用情况。以下是表上各列的一般含义&#xff1a; 1. **Call Chart (调用图)**: …

Web中的转发与重定向

转发与重定向 一、转发和重定向的概念1.转发2.重定向 二、JavaWeb 中的转发和重定向三、SpringMVC 中的转发和重定向1.转发(1) 默认的方式(2) 完整的方式 2.重定向 四、总结 一、转发和重定向的概念 在 Web 应用中&#xff0c;转发和重定向都是用于将请求从一个页面传递到另一…

MIMIC-IV官方视图解析 - cardiac_marker心脏标记表

今天在学习官方衍生表mimiciv_derived.cardiac_marker心脏标记表时候发现了一些问题&#xff1a; 该表中troponin_t &#xff08;肌钙蛋白t&#xff09;的值结果都是空值null 或者 ___ &#xff08;由于去标识化&#xff09;&#xff0c; 这明显是不合理的 小编查看了该表的官…

提升小波的理解

本文简要介绍一下提升小波的计算过程和基本原理: 1、划分 假设有序列X, 将其奇数索引上的元素构成,Xo将其偶数索引上的元素构成,Xe之所以能文献中都用Xo和Xe划分,是因为 o来源于odd,奇数;e来源于even,偶数;举个例子: 有序列:X=[3,5,22,33,12,34,56,77,99,29] Xo…

乐鑫与 Elektor 杂志合作推出特刊,聚焦 AIoT 创新

在新一年的起始之际&#xff0c;我们很荣幸地与 Elektor 合作推出由乐鑫领衔编辑的杂志特刊。欢迎点此阅读电子版本。 Elektor 杂志作为国际电子工程和科技创新的重要平台&#xff0c;自 20 世纪 60 年代起&#xff0c;就引领着电子制造的发展潮流。如今&#xff0c;它已经发展…

服务端渲染

SSR简单来说就是页面上的内容是通过服务端渲染生成的&#xff0c;浏览器直接显示服务端返回的html就可以了。相比之前常用的SPA来说有很多的优点&#xff0c;如下图&#xff0c;但也有一些实际存在的问题&#xff0c;在实际应用中需要多方面权衡利弊。 SSR优势 SSR缺点&#xf…

THREE.JS动态场景开发实战【赛博朋克】

在本教程中&#xff0c;我们将探索如何创建类似 Three.js 的赛博朋克场景&#xff0c;灵感来自 Pipe 网站上的背景动画。 我们将指导你完成使用 Three.js 编码动态场景的过程&#xff0c;包括后处理效果和动态光照&#xff0c;所有这些都不需要任何着色器专业知识。 我用这个场…

【网络】:网络套接字(TCP)

网络套接字&#xff08;TCP&#xff09; 一.编写TCP服务器二.编写Tcp客户端三.多进程四.多线程版本五.线程池版完整源代码六.使用示例 一.编写TCP服务器 1.先搭一个架子 2.创建sockfd domain参数依然是AF_INET(因为是IPV4) type方式选择SOCK_STREAM&#xff08;提供可靠的连接…

优思学院|如何评价质量经理这个角色?

简单来说&#xff0c;公司的成败已经取决于质量的水准。质量是任何公司的重要组成部分&#xff0c;无法保证商品质量的公司将很快失去信誉与消费者的认可&#xff0c;最终导致销售额直线下降。 所以&#xff0c;质量经理的意义首先体现在他们对于质量控制体系的建立和维护上。…

辽宁链家新房数据采集与可视化实现

摘 要 网络爬虫也叫做网络机器人&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取网络信息&#xff0c;进行数据信息的采集与整理的程序或者脚本。随着海量数据的出现&#xff0c;如何快速有效的获取到我们想要的数据成为难题。以房源信息为例&#xff0c;该文使用Pyt…

MySQL之索引分类,语法以及SQL性能分析(慢日志,profile,explain)

索引分类 分类含义特定关键字主键索引针对于表中主键创建的索引默认自动创建&#xff0c;只能有一个PRIMARY唯一索引避免同一个表中某数据列中的值重复可以有多个UNIQUE常规索引快速定位特定数据可以有多个全文索引全文索引查找的文本中的关键字&#xff0c;而不是比较索引中的…

Java正则表达式之Pattern和Matcher

目录 前言一、Pattern和Matcher的简单使用二、Pattern详解2.1 Pattern 常用方法2.1.1 compile(String regex)2.1.2 matches(String regex, CharSequence input)2.1.3 split(CharSequence input)2.1.4 pattern()2.1.5 matcher(CharSequence input) 三、Matcher详解3.1 Matcher 常…