Kernel panic 堆栈信息怎么看
Kernel panic 是指 Linux 内核遇到了无法继续执行的致命错误,此时会在屏幕上输出一些错误信息,其中就包括堆栈信息。堆栈信息是指发生错误时 CPU 执行的代码路径,可以通过堆栈信息来定位错误发生的位置。
通常,堆栈信息会以类似下面的形式输出:
Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
CPU: 0 PID: 1 Comm: init Not tainted 4.4.0-31-generic #50-Ubuntu
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
ffffffff813f7ab7 ffff8800363c7e00 ffffffff817e0c5d 0000000000000000
ffff8800363c7e38 ffff8800363c7e20 ffffffff8108124c ffff8800363c7e58
ffffffff810812a2 ffffffff81862f78 ffffffff81862f68 ffffffff81862f68
Call Trace:
[<ffffffff813f7ab7>] dump_stack+0x63/0x82
[<ffffffff817e0c5d>] panic+0xc8/0x1fe
[<ffffffff8108124c>] do_exit+0x6d4/0x6e0
[<ffffffff810812a2>] do_group_exit+0x42/0xa0
[<ffffffff8108a300>] get_signal+0x2f8/0x5c0
[<ffffffff81015eb5>] do_signal+0x55/0x6d0
[<ffffffff8108f9cc>] ? __fget_light+0x3c/0x50
[<ffffffff81011c2b>] do_notify_resume+0x9b/0xc0
[<ffffffff817fba0c>] int_signal+0x12/0x17
堆栈信息的最后一行是 Call Trace:,接下来的几行是函数调用栈,每一行都是一个函数调用,最上面的是发生错误的函数,最下面的是最开始的函数。
在上面的例子中,发生错误的函数是 panic+0xc8/0x1fe,它是由函数 do_exit+0x6d4/0x6e0 调用的,而 do_exit 又是由函数 do_group_exit+0x42/0xa0 调用的,以此类推,直到最下面的 int_signal+0x12/0x17,它是被中断处理程序调用的。
通过分析堆栈信息,可以找到发生错误的函数及其调用关系,从而定位错误原因。
实例
Kernel Panic 日志如下:
[ 4.575208] intel_rapl: no valid rapl domains found in package 0
[ 4.585046] intel_rapl: no valid rapl domains found in package 0
[ 5.528975] general protection fault: 0000 [#1] SMP
[ 5.531157] Modules linked in: ppdev crc32_pclmul ghash_clmulni_intel aesni_intel lrw gf128mul glue_helper ablk_helper cryptd pcspkr virtio_balloon snd_hda_codec_generic sg parport_pc parport snd_hda_intel snd_hda_codec snd_hda_core snd_hwdep snd_seq snd_seq_device snd_pcm snd_timer snd soundcore i2c_piix4 nfsd auth_rpcgss nfs_acl lockd grace sunrpc ip_tables xfs libcrc32c sr_mod cdrom ata_generic pata_acpi virtio_blk qxl syscopyarea virtio_console sysfillrect sysimgblt virtio_net drm_kms_helper ttm crct10dif_pclmul crct10dif_common ata_piix crc32c_intel drm serio_raw libata virtio_pci virtio_ring i2c_core virtio floppy dm_mirror dm_region_hash dm_log dm_mod
[ 5.556243] CPU: 1 PID: 1791 Comm: mktemp Tainted: G W ------------ 3.10.0-327.el7.x86_64 #1
[ 5.559680] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
[ 5.562122] task: ffff8801f3da2280 ti: ffff8800bb998000 task.ti: ffff8800bb998000
[ 5.564988] RIP: 0010:[<ffffffff811dc33e>] [<ffffffff811dc33e>] vfs_open+0x5e/0x70
[ 5.567942] RSP: 0018:ffff8800bb99bcf8 EFLAGS: 00010206
[ 5.569977] RAX: ffff8801f7fd4180 RBX: ffff8800bb99bf28 RCX: 63616e695f736678
[ 5.572568] RDX: ffff8800bb9c0300 RSI: ffff8801f4252f00 RDI: ffff8801f7fd4180
[ 5.575107] RBP: ffff8800bb99bcf8 R08: ffff8801f4252f00 R09: 0000000000000000
[ 5.577635] R10: ffff8801f7fd4180 R11: ffffea0000dade40 R12: 00000000000080c2
[ 5.580186] R13: ffff8800bb99bdf0 R14: 0000000000000000 R15: ffff8800bb99be50
[ 5.582652] FS: 00007f14f380e740(0000) GS:ffff8801ffd00000(0000) knlGS:0000000000000000
[ 5.585344] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 5.587257] CR2: 00007f14f2771fb0 CR3: 0000000035ffe000 CR4: 00000000003406e0
[ 5.589638] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 5.592064] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 5.594334] Stack:
[ 5.594993] ffff8800bb99bda8 ffffffff811eb90d ffff880035dbeaf8 ffff8800bb99bdc0
[ 5.597430] ffff8800bb99bd48 ffff8801f3da2280 00000101f3da2280 0000000000000000
[ 5.599903] 0000000000000000 ffff8801f1478000 ffff8800bb99bde4 ffff8801f7fd2a80
[ 5.602303] Call Trace:
[ 5.603041] [<ffffffff811eb90d>] do_last+0x1ed/0x1270
[ 5.604554] [<ffffffff811ee672>] path_openat+0xc2/0x490
[ 5.606124] [<ffffffff811efe3b>] do_filp_open+0x4b/0xb0
[ 5.607660] [<ffffffff811fc9c7>] ? __alloc_fd+0xa7/0x130
[ 5.609228] [<ffffffff811dd7e3>] do_sys_open+0xf3/0x1f0
[ 5.610813] [<ffffffff811dd8fe>] SyS_open+0x1e/0x20
[ 5.612269] [<ffffffff81645909>] system_call_fastpath+0x16/0x1b
[ 5.614003] Code: f6 e8 27 fc ff ff 5d c3 0f 1f 44 00 00 48 8b 51 20 48 85 d2 74 d4 48 8b 8a d0 00 00 00 48 85 c9 74 c8 48 89 f2 48 89 c7 4c 89 c6 <ff> d1 5d c3 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44
[ 5.621542] RIP [<ffffffff811dc33e>] vfs_open+0x5e/0x70
[ 5.622799] RSP <ffff8800bb99bcf8>
[ 5.623642] ---[ end trace ab3a1c6a69ac5150 ]---
[ 5.624735] Kernel panic - not syncing: Fatal exception
[ 5.626489] drm_kms_helper: panic occurred, switching back to text console
- 分析
“CPU: 1 PID: 1791 Comm: mktemp” ,由此可知导致panic的进程是 mktemp。
在 Linux 内核引导过程中,没有 mktemp 进程参与。mktemp 是一个用户态的工具,用于创建一个唯一的临时文件名。它的作用是在指定的目录中创建一个临时文件,文件名可以自动生成,保证不重复。这个过程需要使用到随机数生成算法,确保文件名的唯一性。
从函数调用栈可知,导致panic的函数是“path_openat+0xc2/0x490”。
path_openat 函数是 Linux 系统中的一个系统调用函数,用于打开或创建一个文件。与普通的 open 函数类似,但是它还需要指定文件路径所在的目录,即需要传递一个目录文件描述符作为参数。
- 尝试
试着删除/tmp目录下所有文件,再次启动没有了这个报错。虽然后面又出现了新的报错,此处按过不表。
Kernel panic 堆栈信息怎么看的更多相关文章
- Kernel Panic常见原因以及解决方法
Technorati 标签: Kernel Panic 出现原因 1. Linux在中断处理程序中,它不处于任何一个进程上下文,如果使用可能睡眠的函数,则系统调度会被破坏,导致kernel panic ...
- 深入 kernel panic 流程【转】
一.前言 我们在项目开发过程中,很多时候会出现由于某种原因经常会导致手机系统死机重启的情况(重启分Android重启跟kernel重启,而我们这里只讨论kernel重启也就是 kernel panic ...
- Linux Kernel PANIC(三)--Soft Panic/Oops调试及实例分析【转】
转自:https://blog.csdn.net/gatieme/article/details/73715860 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...
- 还原堆栈信息,分析地形系统使用ASTC格式的纹理导致Crash的问题
0x00 前言 在这篇文章中,我们选择了过去一周Unity官方社区交流群中比较有代表性的几个问题,总结在这里和大家进行分享.主要涵盖了IL2CPP.Scripting.Virtual Reality. ...
- Linux 如何使用gdb 查看core堆栈信息
转载:http://blog.csdn.net/mergerly/article/details/41994207 core dump 一般是在segmentation fault(段错误)的情况下产 ...
- 挂载文件系统出现"kernel panic..." 史上最全解决方案
问:挂载自己制作的文件系统卡在这里: NET: Registered protocol family 1 NET: Registered protocol family 17 VFS: Mounted ...
- java命令--jstack 工具 查看JVM堆栈信息
介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项" ...
- 系统启动挂载根文件系统时Kernel panic
转自:http://qiuye.iteye.com/blog/543595 这类问题很常见,先总体介绍一下解决思路. 能出现让人激动的的控制台,那么系统移植已经接近完成:但是不少人在最后一步出现问题. ...
- kernel.panic
sysctl -a kernel.panic = 0kernel.panic_on_io_nmi = 0kernel.panic_on_oops = 1kernel.panic_on_stackove ...
- log显示error时的堆栈信息理解和分析
error显示的log堆栈信息,是从最深层(最内层)的堆栈信息开始由内向外打印的. error显示的log堆栈信息,是从最深层(最内层)的堆栈信息开始由内向外打印的. error显示的log堆栈信息, ...
随机推荐
- openpyxl读写文件demo
开头 python处理Excel一直是自己头痛的问题,因为选择太多,有panda, 有csv, 有今天使用openpyxl.特别记录一下openpyxl的使用 安装 pip install openp ...
- 2022-10-22:以下go语言代码输出什么?A:moonfdd1;B:编译错误;C:运行时 panic。 package main import “fmt“ func main() {
2022-10-22:以下go语言代码输出什么?A:moonfdd1:B:编译错误:C:运行时 panic. package main import "fmt" func main ...
- 2022-03-04:爱吃香蕉的珂珂。 珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。 珂珂可以决定她吃香蕉的速度 K (单位:根
2022-03-04:爱吃香蕉的珂珂. 珂珂喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 H 小时后回来. 珂珂可以决定她吃香蕉的速度 K (单位:根 ...
- AcWing 1019. 庆功会
为了庆贺班级在校运动会上取得全校第一名成绩,班主任决定开一场庆功会,为此拨款购买奖品犒劳运动员. 期望拨款金额能购买最大价值的奖品,可以补充他们的精力和体力. 输入格式 第一行二个数n,m,其中n代表 ...
- Ubuntu 18.04 (Bionic) 简单快速的安装mongodb
按步骤走,不带脑子式安装(注意4.0版本mongodb官方已经不再支持,以下代码中可以修改mongodb版本号安装,目前最新版为6.0,如果懒得改直接用也可以,文章后边第三章第一条代码会直接升级为最新 ...
- Nodejs 应用编译构建提速建议
编译构建的整体过程 拉取编译镜像 拉取缓存镜像 拉取项目源码 挂载缓存目录 执行编译命令(用户自定义) 持久化缓存 上传编译镜像 为什么在本地构建就快, 但编译机上很慢 在编辑机上每次的构建环境都是全 ...
- 代码随想录算法训练营Day50 动态规划
代码随想录算法训练营 代码随想录算法训练营Day50 动态规划| 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV 123.买卖股票的最佳时机III 题目链接:123.买卖股票的最佳时 ...
- 源码解析:数据批量导入bukl_crete()原理
在Django中需要向数据库中插入多条数据(list).使用如下方法,每次save()的时候都会访问一次数据库.导致性能问题: for i in resultlist: p = Account(nam ...
- Kubernetes GoRoutineMap工具包代码详解
1.概述 GoRoutineMap 定义了一种类型,可以运行具有名称的 goroutine 并跟踪它们的状态.它防止创建具有相同名称的多个goroutine,并且在上一个具有该名称的 goroutin ...
- kafka集群是如何选择leader,你知道吗?
前言 kafka集群是由多个broker节点组成,这里面包含了许多的知识点,以下的这些问题你都知道吗? 你知道topic的分区leader是怎么选举的吗? 你知道zookeeper中存储了kafka的 ...