CN113434150A - 一种Linux内核崩溃信息定位方法 - Google Patents
一种Linux内核崩溃信息定位方法 Download PDFInfo
- Publication number
- CN113434150A CN113434150A CN202110999899.2A CN202110999899A CN113434150A CN 113434150 A CN113434150 A CN 113434150A CN 202110999899 A CN202110999899 A CN 202110999899A CN 113434150 A CN113434150 A CN 113434150A
- Authority
- CN
- China
- Prior art keywords
- kernel
- server
- information
- kdump
- kernel crash
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Abstract
一种Linux内核崩溃信息定位方法,所述方法包括步骤:通过kdump工具获取第一服务器中的内核崩溃信息;将所述内核崩溃信息转储到第二服务器;通过nm工具和objdump工具结合的方式获取所述内核崩溃信息对应的vmlinux的反汇编代码文件;根据所述反汇编代码文件定位所述内核崩溃信息对应代码。本申请提供的一种Linux内核崩溃信息定位方法可以通过kdump工具产生远程崩溃转储文件,并通过nm工具和objdump工具结合的方式快速产生vmlinux的局部反汇编文件,使对崩溃转储文件进行分析、精确定位的时间由60分钟缩减到1分钟,大大提高了内核开发人员的工作效率。
Description
技术领域
本发明属于Linux系统技术领域,具体涉及一种Linux内核崩溃信息定位方法。
背景技术
Linux服务器以稳定著称,但是也会存在由于驱动或内核的某些代码漏洞导致系统崩溃的情况发生,此时的崩溃日志非常重要。而分析崩溃日志时,定位崩溃原因也非常重要。
在内核崩溃日志产生的技术中,目前有技术人员使用串口进行监控OOPS信息,但是这种方式实用性较差,若连续发生内核崩溃,更有可能造成串口输出内核崩溃信息被覆盖,使内核崩溃分析人员分析难度增大;也有技术人员使用kdump机制进行本地转储文件,通过本地转储文件从中提取OOPS信息和其他有关信息,也能达到分析内核崩溃原因的目的,但是大多数Linux服务器运行环境在机房中,这会对内核崩溃分析造成一些阻碍。
在内核崩溃日志分析的技术中,有技术人员直接使用OOPS信息的RIP字段找出造成内核崩溃的函数,然后在此函数中增加多个printk函数进行辅助定位,但是这种方法往往需要多次调试才能达到准确定位问题的目的。
也有技术人员通过对整个vmlinux文件进行反汇编处理,再结合RIP进行崩溃问题定位。以CentOS8为例,4.18.0-90内核的vmlinux文件大小是700MB,反汇编一次耗时约60分钟对,vmlinux文件进行反汇编这项工作非常耗时,查看反汇编文件也同样不方便。
发明内容
为解决上述问题,本发明提供了一种Linux内核崩溃信息定位方法,所述方法包括步骤:
通过kdump工具获取第一服务器中的内核崩溃信息;
将所述内核崩溃信息转储到第二服务器;
获取所述第二服务器中的RIP信息;
使用所述RIP信息找到造成所述内核崩溃信息的崩溃函数;
使用nm工具查找所述崩溃函数在vmlinux的起始地址和结束地址;
使用objdump工具对vmlinux进行局部反汇编;
得到所述崩溃函数对应的反汇编代码文件;
根据所述反汇编代码文件定位所述内核崩溃信息对应代码。
优选地,在所述通过kdump工具获取第一服务器中的内核崩溃信息之前还包括步骤:
在所述第一服务器中配置分析环境;
在所述第二服务器中配置测试环境。
优选地,所述通过kdump工具获取第一服务器中的内核崩溃信息包括步骤:
获取配置有分析环境的第一服务器;
在所述第一服务器中安装Linux系统;
配置所述分析环境的IP地址;
在所述分析环境中安装内核软件包;
开启所述分析环境中的kdump服务;
在所述分析环境中配置kdump;
在所述分析环境中制造内核崩溃。
优选地,所述Linux系统为CentOS8.1系统。
优选地,所述开启所述分析环境中的kdump服务包括步骤:
在所述分析环境中安装kexec-tools软件包;
开启kdump服务;
设置所述kdump服务为开机启动。
优选地,所述在所述分析环境中配置kdump包括步骤:
在所述分析环境中增加内核启动参数;
对所述分析环境的root用户增加免密登陆配置;
在kdump服务文件中增加IP地址对应的root用户账号。
优选地,所述在所述分析环境中制造内核崩溃包括步骤:
获取所述分析环境中的内核崩溃触发命令;
使用所述内核崩溃触发命令在所述分析环境中制造内核崩溃。
优选地,所述将所述内核崩溃信息转储到第二服务器包括步骤:
所述第一服务器中的kdump获取所述内核崩溃信息;
所述kdump将所述内核崩溃信息转换成预设格式;
所述kdump将所述内核崩溃信息发送至所述第二服务器。
优选地,根据所述反汇编代码文件定位所述内核崩溃信息对应代码包括步骤:
获取所述第二服务器中的RIP信息;
使用所述RIP信息找到所述反汇编代码文件的执行位置;
定位所述内核崩溃信息对应代码。
本申请提供的一种Linux内核崩溃信息定位方法可以通过kdump工具产生远程崩溃转储文件,并通过nm工具和objdump工具结合的方式快速产生vmlinux的局部反汇编文件,使对崩溃转储文件进行分析、精确定位的时间由60分钟缩减到1分钟,大大提高了内核开发人员的工作效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的一种Linux内核崩溃信息定位方法的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
如图1,在本申请实施例中,本发明提供了一种Linux内核崩溃信息定位方法,所述方法包括步骤:
S1:通过kdump工具获取第一服务器中的内核崩溃信息;
在本申请实施例中,所述通过kdump工具获取第一服务器中的内核崩溃信息包括步骤:
获取配置有分析环境的第一服务器;
在所述第一服务器中安装Linux系统;
配置所述分析环境的IP地址;
在所述分析环境中安装内核软件包;
开启所述分析环境中的kdump服务;
在所述分析环境中配置kdump;
在所述分析环境中制造内核崩溃。
在本申请实施例中,第一服务器为安装有X86分析环境的服务器,在所述第一服务器中安装Linux系统,所述Linux系统为CentOS8.1系统;接着配置所述分析环境的IP地址,IP地址为192.168.1.101;然后在所述分析环境中安装内核软件包,内核软件包为debuginfo软件包;接着开启所述分析环境中的kdump服务,然后在所述分析环境中配置kdump,最后在所述分析环境中制造内核崩溃。
在本申请实施例中,在所述通过kdump工具获取第一服务器中的内核崩溃信息之前还包括步骤:
在所述第一服务器中配置分析环境;
在所述第二服务器中配置测试环境。
在本申请实施例中,准备两个服务器,然后在两个服务器中分别配置一个X86环境,分别是分析环境与测试环境,两个环境均安装CentOS8.1系统,分析环境配置IP地址为192.168.1.101,测试环境IP地址为192.168.1.102。
在本申请实施例中,所述开启所述分析环境中的kdump服务包括步骤:
在所述分析环境中安装kexec-tools软件包;
开启kdump服务;
设置所述kdump服务为开机启动。
在本申请实施例中,开启所述分析环境中的kdump服务的具体步骤为:
打开kdump服务;
安装kexec-tools软件包;
开启kdump服务并设置成开机启动。
在本申请实施例中,所述在所述分析环境中配置kdump包括步骤:
在所述分析环境中增加内核启动参数;
对所述分析环境的root用户增加免密登陆配置;
在kdump服务文件中增加IP地址对应的root用户账号。
在本申请实施例中,配置kdump的具体步骤为:
在所述分析环境中增加内核启动参数(crashkernel=512M);
对所述分析环境的root用户增加免密登陆配置;
在kdump服务文件(/etc/kdump.conf文件)中增加IP地址对应的root用户账号(net root@192.168.1.101)。
在本申请实施例中,所述在所述分析环境中制造内核崩溃包括步骤:
获取所述分析环境中的内核崩溃触发命令;
使用所述内核崩溃触发命令在所述分析环境中制造内核崩溃。
在本申请实施例中,在所述分析环境中制造内核崩溃的具体步骤为:
获取所述分析环境中的内核崩溃触发命令(echo c > /proc/sysrq-trigger命令);
使用所述内核崩溃触发命令在所述分析环境中制造内核崩溃。
S2:将所述内核崩溃信息转储到第二服务器;
在本申请实施例中,所述将所述内核崩溃信息转储到第二服务器包括步骤:
所述第一服务器中的kdump获取所述内核崩溃信息;
所述kdump将所述内核崩溃信息转换成预设格式;
所述kdump将所述内核崩溃信息发送至所述第二服务器。
在本申请实施例中,当第一服务器中产生内核崩溃后,第一服务器中的kdump获取所述内核崩溃信息,然后所述kdump将所述内核崩溃信息转换成预设格式(比如第二服务器可以识别的格式),然后所述kdump将所述内核崩溃信息发送至所述第二服务器。
S3:通过nm工具和objdump工具结合的方式获取所述内核崩溃信息对应的vmlinux的反汇编代码文件;
在本申请实施例中,所述通过nm工具和objdump工具结合的方式获取所述内核崩溃信息对应的vmlinux的反汇编代码文件包括步骤:
获取所述第二服务器中的RIP信息;
使用所述RIP信息找到造成所述内核崩溃信息的崩溃函数;
使用nm工具查找所述崩溃函数在vmlinux的起始地址和结束地址;
使用objdump工具对vmlinux进行局部反汇编;
得到所述崩溃函数对应的反汇编代码文件。
在本申请实施例中,通过nm工具和objdump工具结合的方式获取所述内核崩溃信息对应的vmlinux的反汇编代码文件的具体步骤为:在/var/crash目录中查找包含192.168.1.102字眼的转储文件夹中的vmcore-dmesg.txt文件,使用cat vmcore-dmesg.txt | grep RIP | grep 0010命令找到引起内核崩溃的函数及其执行偏移量。当前崩溃定位到的信息是:sysrq_handle_crash+0x12/0x20,然后反汇编vmlinux进入/usr/lib/debug/lib/modules/4.18.0-80.7.1.el8_0.x86_64+debug目录,根据得到的sysrq_handle_crash函数名称,执行nm -n vmlinux | grep sysrq_handle_crash -A 1命令,获得sysrq_handle_crash起始位置0xffffffff81fcacc0和结束位置0x ffffffff81fcad90;接着使用objdump -S vmlinux --start-address=0xffffffff81fcacc0 --stop-address=0xffffffff8 1fcad90 > sysrq_handle_crash.S命令对vmlinux进行部分反汇编工作。
S4:根据所述反汇编代码文件定位所述内核崩溃信息对应代码。
在本申请实施例中,所述根据所述反汇编代码文件定位所述内核崩溃信息对应代码包括步骤:
获取所述第二服务器中的RIP信息;
使用所述RIP信息找到所述反汇编代码文件的执行位置;
定位所述内核崩溃信息对应代码。
在本申请实施例中,打开sysrq_handle_crash.S文件,关注左侧地址信息,sysrq_handle_crash()函数的起始位置是0xffffffff81fcacc0,根据得到的sysrq_handle_crash+0x12/0x20位置信息,使用0xffffffff81fcacc0 + 0x12就可以得到崩溃原因的精确位置。
本申请提供的一种Linux内核崩溃信息定位方法可以通过kdump工具产生远程崩溃转储文件,并通过nm工具和objdump工具结合的方式快速产生vmlinux的局部反汇编文件,使对崩溃转储文件进行分析、精确定位的时间由60分钟缩减到1分钟,大大提高了内核开发人员的工作效率。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
Claims (9)
1.一种Linux内核崩溃信息定位方法,其特征在于,所述方法包括步骤:
通过kdump工具获取第一服务器中的内核崩溃信息;
将所述内核崩溃信息转储到第二服务器;
获取所述第二服务器中的RIP信息;
使用所述RIP信息找到造成所述内核崩溃信息的崩溃函数;
使用nm工具查找所述崩溃函数在vmlinux的起始地址和结束地址;
使用objdump工具对vmlinux进行局部反汇编;
得到所述崩溃函数对应的反汇编代码文件;
根据所述反汇编代码文件定位所述内核崩溃信息对应代码。
2.根据权利要求1所述的Linux内核崩溃信息定位方法,其特征在于,在所述通过kdump工具获取第一服务器中的内核崩溃信息之前还包括步骤:
在所述第一服务器中配置分析环境;
在所述第二服务器中配置测试环境。
3.根据权利要求1所述的Linux内核崩溃信息定位方法,其特征在于,所述通过kdump工具获取第一服务器中的内核崩溃信息;包括步骤:
获取配置有分析环境的第一服务器;
在所述第一服务器中安装Linux系统;
配置所述分析环境的IP地址;
在所述分析环境中安装内核软件包;
开启所述分析环境中的kdump服务;
在所述分析环境中配置kdump;
在所述分析环境中制造内核崩溃。
4.根据权利要求3所述的Linux内核崩溃信息定位方法,其特征在于,所述Linux系统为CentOS8.1系统。
5.根据权利要求3所述的Linux内核崩溃信息定位方法,其特征在于,所述开启所述分析环境中的kdump服务包括步骤:
在所述分析环境中安装kexec-tools软件包;
开启kdump服务;
设置所述kdump服务为开机启动。
6.根据权利要求3所述的Linux内核崩溃信息定位方法,其特征在于,所述在所述分析环境中配置kdump包括步骤:
在所述分析环境中增加内核启动参数;
对所述分析环境的root用户增加免密登陆配置;
在kdump服务文件中增加IP地址对应的root用户账号。
7.根据权利要求3所述的Linux内核崩溃信息定位方法,其特征在于,所述在所述分析环境中制造内核崩溃包括步骤:
获取所述分析环境中的内核崩溃触发命令;
使用所述内核崩溃触发命令在所述分析环境中制造内核崩溃。
8.根据权利要求1所述的Linux内核崩溃信息定位方法,其特征在于,所述将所述内核崩溃信息转储到第二服务器包括步骤:
所述第一服务器中的kdump获取所述内核崩溃信息;
所述kdump将所述内核崩溃信息转换成预设格式;
所述kdump将所述内核崩溃信息发送至所述第二服务器。
9.根据权利要求1所述的Linux内核崩溃信息定位方法,其特征在于,根据所述反汇编代码文件定位所述内核崩溃信息对应代码包括步骤:
获取所述第二服务器中的RIP信息;
使用所述RIP信息找到所述反汇编代码文件的执行位置;
定位所述内核崩溃信息对应代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110999899.2A CN113434150B (zh) | 2021-08-30 | 2021-08-30 | 一种Linux内核崩溃信息定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110999899.2A CN113434150B (zh) | 2021-08-30 | 2021-08-30 | 一种Linux内核崩溃信息定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113434150A true CN113434150A (zh) | 2021-09-24 |
CN113434150B CN113434150B (zh) | 2021-12-17 |
Family
ID=77798269
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110999899.2A Active CN113434150B (zh) | 2021-08-30 | 2021-08-30 | 一种Linux内核崩溃信息定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113434150B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101719090A (zh) * | 2009-12-25 | 2010-06-02 | 珠海市君天电子科技有限公司 | 对计算机软件系统崩溃原因进行自动分析的方法 |
CN102929747A (zh) * | 2012-11-05 | 2013-02-13 | 中标软件有限公司 | 基于龙芯服务器的Linux操作系统崩溃转储的处理方法 |
CN105786680A (zh) * | 2016-02-17 | 2016-07-20 | 北京飞杰信息技术有限公司 | 内核崩溃后内存预分析方法及其系统 |
CN109062627A (zh) * | 2018-07-12 | 2018-12-21 | 郑州云海信息技术有限公司 | 一种Linux服务器系统kdump服务的配置方法 |
CN109714355A (zh) * | 2019-01-08 | 2019-05-03 | 中国人民解放军火箭军工程大学 | 一种用于VxWorks系统的漏洞分析利用方法 |
CN111381992A (zh) * | 2020-03-06 | 2020-07-07 | 北京五八信息技术有限公司 | 一种崩溃日志处理方法、装置、电子设备及存储介质 |
CN112099982A (zh) * | 2020-09-08 | 2020-12-18 | 北京字节跳动网络技术有限公司 | 一种崩溃信息定位方法、装置、介质和电子设备 |
-
2021
- 2021-08-30 CN CN202110999899.2A patent/CN113434150B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101719090A (zh) * | 2009-12-25 | 2010-06-02 | 珠海市君天电子科技有限公司 | 对计算机软件系统崩溃原因进行自动分析的方法 |
CN102929747A (zh) * | 2012-11-05 | 2013-02-13 | 中标软件有限公司 | 基于龙芯服务器的Linux操作系统崩溃转储的处理方法 |
CN105786680A (zh) * | 2016-02-17 | 2016-07-20 | 北京飞杰信息技术有限公司 | 内核崩溃后内存预分析方法及其系统 |
CN109062627A (zh) * | 2018-07-12 | 2018-12-21 | 郑州云海信息技术有限公司 | 一种Linux服务器系统kdump服务的配置方法 |
CN109714355A (zh) * | 2019-01-08 | 2019-05-03 | 中国人民解放军火箭军工程大学 | 一种用于VxWorks系统的漏洞分析利用方法 |
CN111381992A (zh) * | 2020-03-06 | 2020-07-07 | 北京五八信息技术有限公司 | 一种崩溃日志处理方法、装置、电子设备及存储介质 |
CN112099982A (zh) * | 2020-09-08 | 2020-12-18 | 北京字节跳动网络技术有限公司 | 一种崩溃信息定位方法、装置、介质和电子设备 |
Non-Patent Citations (1)
Title |
---|
ZUXI: ""Linux下反汇编指定的函数https://blog.csdn.net/wangzuxi/article/details/41322131"", 《CSDN》 * |
Also Published As
Publication number | Publication date |
---|---|
CN113434150B (zh) | 2021-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6430707B1 (en) | Source-level debugging of client dump image in a computer network | |
JP2002202901A (ja) | フルダンプファイルからのミニダンプファイルの作成 | |
US20090049438A1 (en) | Method for Optimizing Migration of Software Applications to Address Needs | |
US20120054727A1 (en) | System and method for updating hard-coded dependencies | |
US20080098365A1 (en) | Performance analyzer | |
CN111597089B (zh) | 一种Linux系统调用事件采集和缓存装置及方法 | |
CN110851324A (zh) | 基于日志的巡检处理方法、装置以及电子设备、存储介质 | |
US8560895B2 (en) | Distillation and reconstruction of provisioning components | |
CN111656325B (zh) | 在按时间排序的日志结构化键-值存储系统中从故障快速恢复 | |
US7730451B2 (en) | Source server | |
CN115576649A (zh) | 一种基于行为监控的容器运行时安全检测方法 | |
CN113434150B (zh) | 一种Linux内核崩溃信息定位方法 | |
CN116107524B (zh) | 低代码应用日志处理方法、介质、装置和计算设备 | |
CN106897063B (zh) | 一种基于efi将os启动项永久添加至bios中的方法及系统 | |
CN112068981A (zh) | Linux操作系统中基于知识库的故障扫描恢复方法及系统 | |
US7363615B2 (en) | Stack-based callbacks for diagnostic data generation | |
CN110765078A (zh) | 一种文件管理方法、装置及计算机可读存储介质 | |
CN100416448C (zh) | 计算机系统及其配置方法 | |
CN115016968A (zh) | 一种异常处理方法、装置、设备及介质 | |
CN113220586A (zh) | 一种自动化的接口压力测试执行方法、装置和系统 | |
CN111656331A (zh) | 来自垃圾收集期间的故障的按时间排序的日志结构化键-值储存库 | |
CN109032698B (zh) | 一种Linux启动失败时Debug信息收集的方法及系统 | |
CN117459401A (zh) | 网络靶场环境快照的生成方法、装置、设备和存储介质 | |
Artho et al. | Efficient model checking of applications with input/output | |
CN117453565A (zh) | 一种iOS客户端闪退信息精准上报的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |