如何使用crash工具分析Linux内核崩溃转储文件

如何使用crash工具分析Linux内核崩溃转储文件,第1张

如前文所述,当 linux 系统内核发生崩溃的时候,可以通过 kdump 等方式收集内核崩溃之前的内存,生成一个转储文件 vmcore。内核开发者通过分析该 vmcore 文件就可以诊断出内核崩溃的原因,从而进行 *** 作系统的代码改进。那么 crash 就是一个被广泛使用的内核崩溃转储文件分析工具,掌握 crash 的使用技巧,对于定位问题有着十分重要的作用。

1.用安装光盘或者硬盘安装的方式进入安装界面,在shell 中输入 Linux rescue

2.然后根据提示选择语言和键盘格式

3.选择是否配置网卡一般系统到了要rescue了,网络也就不需要了,所以可以选择否跳过网卡配置,当然你如果需要也可以选择是,具体设置过程和安装时一样。

4.选择是否然让系统查找硬盘上的RHEL 系统,选择继续。

5.硬盘上的系统已经被找到并挂载在/mnt/sysimage 下

6.按提示chroot /mnt/sysimage

chroot 之后你就可以已经在你的要被拯救的系统下了。

grub挂了的,grub-install /dev/hdxx

配置文件改错的,vi /etc/fstab vi /etc/inittab ……

软件包被毁的 rpm -F xxx.rpm

完成修复工作后,exit命令退出chroot,exit退出rescue shell 系统重启

1.一个死循环不大可能把linux搞崩溃,尤其是到2.4以后,内核都有相应的保护机制,多半情况下这种进程会被杀死的。当然,你可以试试提高进程的优先级(这种我没做过,不知道结果,请事先保存好数据,以免不必要的损失)

2.还有,大量地消耗系统内存。这方法也不能成功。

比如:

======================================

#BOF

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

#define ONE_K (1024)

int main ()

{

char*some_memory

int size_to_allocate = ONE_K

int megs_obtained = 0

int ks_obtained = 0

while (1) {

for (ks_obtained = 0ks_obtained <1024ks_obtained++) {

some_memory = (char*)malloc(size_to_allocate)

if (some_memory == NULL) exit (EXIT_FAILURE)

sprintf(some_memory, "Hello,World")

}

megs_obtained++

printf("Now allocated %d Megabytes\n", megs_obtained)

}

exit(EXIT_SUCCESS)

}

#EOF

====================

运行之后,

.....

.....

Out of Memory:Killed process 2365

Killed

======================================

系统为了保护自己的安全运行,终止了这个危险的进程。

3.驱动程序出现问题,比如驱动有bug崩溃了,这时间系统就危险了,但现在的社区里面写的开源驱动大都能和内核很好地结合,bug也没抓得差不多了。(关于驱动程序,可以参看Minix作者写的 *** 作系统原理那本书,作者分析,70%的系统崩溃是由于驱动程序引起的,所以minix采用了微内核设计,只把必要的几千行代码放在内核而剩下的都放到了用户层,他认为这样做能极大地提高系统的稳定性。关于微内核的优劣,不好评论,反正我了解一点,GNU中的一个项目是做一个叫做Hurd的微内枋系统,这个项目已经有好几年了,可以去www.gnu.org找相应的文档。

4.其它。(不知道了)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7321454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存