红帽Linux故障定位技术详解与实例(3)

 

在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因。

AD:2014WOT全球软件技术峰会北京站 课程视频发布

5、用kdump工具内核故障定位实例

A) 部署Kdump

部署 kdump 收集故障信息的步骤如下:

(1)设置好相关的内核启动参数

在 /boot/grub/menu.lst 中加入如下内容

  1. crashkernel=128M@16M nmi_watchdog=1

其中crashkernel参数是用来为kdump的内核预留内存的; nmi_watchdog=1 是用来激活NMI中断的, 我们在未确定故障是否关闭了中断的情况下, 需要部署NMI watchdog才能确保触发panic. 重启系统确保设置生效

(2)设置好相关的sysctl内核参数

在/etc/sysctl.conf 中最后加入一行

  1. kernel.softlookup_panic = 1

该设置确保softlock发生时会调用panic, 从而触发kdump行为执行 #>sysctl -p 确保设置生效

(3)配置 /etc/kdump.conf

在 /etc/kdump.conf 中加入如下几行内容

  1. ext3 /dev/sdb1
  2. core-collector makedumpfile -c –message-level 7 -d 31 -i /mnt/vmcoreinfo
  3. path /var/crash
  4. default reboot

其中 /dev/sdb1 是用于放置dumpfile 的文件系统, dumpfile 文件放置在/var/crash下, 要事先在/dev/sdb1分区下创建/var/crash 目录. “-d 31”指定对dump内容的过滤级别,这参数对于dump分区放不下全部内存内容或用户不想让dumping中断业务太长时间时很重要. vmcoreinfo 文件放置在 /dev/sdb1 分区的 / 目录下, 需要使用如下命令产生:

#>makedumpfile -g //vmcoreinfo -x /usr/lib/debug/lib/modules/2.6.18-128.el5.x86_64/vmlinux

“vmlinux” 文件是由kernel-debuginfo 包提供的,在运行makedumpfile 之前需要安装相应内核的 kernel-debuginfo 和 kernel-debuginfo-common 两个包,该两个包需从 http://ftp.redhat.com 下载. “default reboot” 用来告诉kdump, 收集完dump信息后重启系统

(4)激活kdump

运行 #>service kdump start 命令,你会看到,在成功完成的情况下会在/boot/目录下生成一个initrd-2.6.18-128.el5.x86_64kdump.img 文件,该文件就是kdump加载的内核的 initrd文件,收集dump信息的工作就是在该initrd的启动环境下进行的. 查看/etc/init.d/kdump脚本的代码,你可看到其中会调用mkdumprd命令创建用于dump的initrd文件

1、测试Kdump部署的有效性

为了测试kdump部署的有效性,本人写了如下一个内核模块,通过insmod 加载该内核模块, 就能产生一个内核线程,在10秒左右后,占据100%的CPU,在20秒左右后触发kdump. 系统重启后,检查/oracle分区/var/crash 目录下的内容,就能确认vmcore文件是否生成.

  1. Zqfthread.c #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. MODULE_AUTHOR("frzhang@redhat.com");
  8. MODULE_DESCRIPTION("A module to test ....");
  9. MODULE_LICENSE("GPL");
  10. static struct task_struct *zqf_thread;
  11. static int zqfd_thread(void *data);
  12. static int zqfd_thread(void *data)
  13. {
  14. int i=0;
  15. while (!kthread_should_stop()) {
  16. i++;
  17. if ( i < 10 ) {
  18. msleep_interruptible(1000);
  19. printk("%d seconds\n", i);
  20. }
  21. if ( i == 1000 ) // Running in the kernel
  22. i = 11 ;
  23. }
  24. return 0;
  25. }
  26. static int __init zqfinit(void)
  27. {
  28. struct task_struct *p;
  29. p = kthread_create(zqfd_thread, NULL,"%s","zqfd");
  30. if ( p ) {
  31. zqf_thread = p;
  32. wake_up_process(zqf_thread); // actually start it up
  33. return(0);
  34. }
  35. return(-1);
  36. }
  37. static void __exit zqffini(void)
  38. {
  39. kthread_stop(zqf_thread);
  40. }
  41. module_init(zqfinit);
  42. module_exit(zqffini)
  43. Makefile obj-m += zqfthread.o
  44. Making #> make -C /usr/src/kernels/2.6.32-71.el6.x86_64/ M=`pwd` modules

2、用crash 工具分析vmcore 文件

用crash 命令分析vmcore 的命令行格式如下所示. 用crash打开vmcore后,主要是用dmesg及 bt 命令打印出问题的执行路径的call trace, 用dis 反汇编出代码,最终确认call trace对应的C源码中的位置,再进行逻辑分析.

  1. #>crash /usr/lib/debug/lib/modules/2.6.18-128.el5.x86_64/vmlinux /boot/System.map-2.6.18-128.el5.x86_64 ./vmcore

红帽Linux故障定位技术详解与实例(3)的更多相关文章

  1. 红帽Linux故障定位技术详解与实例(4)

    红帽Linux故障定位技术详解与实例(4)   在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行 ...

  2. 红帽Linux故障定位技术详解与实例(2)

    红帽Linux故障定位技术详解与实例(2) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍 ...

  3. 红帽Linux故障定位技术详解与实例(1)

    红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍 ...

  4. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  5. Protocol Buffer技术详解(C++实例)

    Protocol Buffer技术详解(C++实例) 这篇Blog仍然是以Google的官方文档为主线,代码实例则完全取自于我们正在开发的一个Demo项目,通过前一段时间的尝试,感觉这种结合的方式比较 ...

  6. Linux crontab命令详解与实例

    内容有重复的,不过本着宁多勿少的原则就都看看吧,就当加深印象啦 基本格式 :* * * * * command分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示第2列表示小时 ...

  7. kali Linux渗透测试技术详解

    kali Linux渗透测试技术详解 下载:https://pan.baidu.com/s/1g7dTFfzFRtPDmMiEsrZDkQ 提取码:p23d <Kali Linux渗透测试技术详 ...

  8. Python开发技术详解(视频+源码+文档)

    Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...

  9. 手游录屏直播技术详解 | 直播 SDK 性能优化实践

    在上期<直播推流端弱网优化策略 >中,我们介绍了直播推流端是如何优化的.本期,将介绍手游直播中录屏的实现方式. 直播经过一年左右的快速发展,衍生出越来越丰富的业务形式,也覆盖越来越广的应用 ...

随机推荐

  1. javascript预编译练习(变态篇)

    例1. <!DOCTYPE html> <html> <head> <title></title> </head> <bo ...

  2. linux环境jdk+tomcat搭建

    一.什么是Linux? 和Windows操作系统软件一样,Linux也是一个操作系统软件.但是和Windows不同的是,Linux是一套开放源代码程序的.并可以自由传播的类Unix操作系统软件(Uni ...

  3. webdriervAPI(窗口截图)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...

  4. 论文阅读 | Combating Adversarial Misspellings with Robust Word Recognition

    对抗防御可以从语义消歧这个角度来做,不同的模型,后备模型什么的,我觉得是有道理的,和解决未登录词的方式是类似的,毕竟文本方面的对抗常常是修改为UNK来发生错误的.怎么使用backgroud model ...

  5. 其他子配置文件:local.conf

    server         {                 listen 80;                 server_name aa.bb.com;                 i ...

  6. [转帖]2015年时的新闻:Debian GNU/Hurd 2015 发布

    Debian GNU/Hurd 2015 发布 oschina 发布于 2015年04月30日 https://www.oschina.net/news/62004/debian-gnu-hurd-2 ...

  7. Eclipse中导入Maven Web项目并配置其在Tomcat中运行

    今天因为实习的关系需要讲公司已经开发的项目导入进Eclipse,而公司的项目是用Maven来构建的所以,需要将Maven项目导入进Eclipse下. 自己因为没有什么经验所以搞了得两个多小时,在这里和 ...

  8. [LGP5115] Check,Check,Check one two!

    神奇的思路,还是要学习一个. 题意:给你一个字符串,并定义两个前缀的lcs.两个后缀的lcp,求式子膜\(2^{64}\)的值. \[ \sum_{1\le i<j\le n} lcp(i,j) ...

  9. Thinkphp6框架学习:($this->error()undefined)Call to undefined method app\index\controller\Admin::error()

    最近在使用Thinkphp6框架的时候,想做一个初始化来验证登录状态. 当没有Session::get(‘adminUid’)的时候就应该跳转到admin\adminLogin的方法中,和以前Tp5的 ...

  10. C数据结构排序算法——希尔排序法用法总结(转http://www.cnblogs.com/skywang12345/p/3597597.html)

    希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...