红帽Linux故障定位技术详解与实例(3)
红帽Linux故障定位技术详解与实例(3)
在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因。
AD:2014WOT全球软件技术峰会北京站 课程视频发布
5、用kdump工具内核故障定位实例
A) 部署Kdump
部署 kdump 收集故障信息的步骤如下:
(1)设置好相关的内核启动参数
在 /boot/grub/menu.lst 中加入如下内容
- crashkernel=128M@16M nmi_watchdog=1
其中crashkernel参数是用来为kdump的内核预留内存的; nmi_watchdog=1 是用来激活NMI中断的, 我们在未确定故障是否关闭了中断的情况下, 需要部署NMI watchdog才能确保触发panic. 重启系统确保设置生效
(2)设置好相关的sysctl内核参数
在/etc/sysctl.conf 中最后加入一行
- kernel.softlookup_panic = 1
该设置确保softlock发生时会调用panic, 从而触发kdump行为执行 #>sysctl -p 确保设置生效
(3)配置 /etc/kdump.conf
在 /etc/kdump.conf 中加入如下几行内容
- ext3 /dev/sdb1
- core-collector makedumpfile -c –message-level 7 -d 31 -i /mnt/vmcoreinfo
- path /var/crash
- 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文件是否生成.
- Zqfthread.c #include
- #include
- #include
- #include
- #include
- #include
- MODULE_AUTHOR("frzhang@redhat.com");
- MODULE_DESCRIPTION("A module to test ....");
- MODULE_LICENSE("GPL");
- static struct task_struct *zqf_thread;
- static int zqfd_thread(void *data);
- static int zqfd_thread(void *data)
- {
- int i=0;
- while (!kthread_should_stop()) {
- i++;
- if ( i < 10 ) {
- msleep_interruptible(1000);
- printk("%d seconds\n", i);
- }
- if ( i == 1000 ) // Running in the kernel
- i = 11 ;
- }
- return 0;
- }
- static int __init zqfinit(void)
- {
- struct task_struct *p;
- p = kthread_create(zqfd_thread, NULL,"%s","zqfd");
- if ( p ) {
- zqf_thread = p;
- wake_up_process(zqf_thread); // actually start it up
- return(0);
- }
- return(-1);
- }
- static void __exit zqffini(void)
- {
- kthread_stop(zqf_thread);
- }
- module_init(zqfinit);
- module_exit(zqffini)
- Makefile obj-m += zqfthread.o
- 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源码中的位置,再进行逻辑分析.
- #>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
转载于:https://www.cnblogs.com/L-H-R-X-hehe/p/3963500.html
红帽Linux故障定位技术详解与实例(3)相关推荐
- 红帽Linux故障定位技术详解与实例(1)
红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍 ...
- Linux磁盘阵列技术详解(二)--raid 1创建
我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还 ...
- java技术详解_Java反射技术详解及实例解析
前言 相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替 ...
- linux磁盘阵列教程,Linux磁盘阵列技术详解(二)--raid 1创建
我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还 ...
- Protocol Buffer技术详解(C++实例)
原文:http://www.cnblogs.com/stephen-liu74/archive/2013/01/04/2842533.html 这篇Blog仍然是以Google的官方文档为主线,代码实 ...
- linux 环境变量详解,Linux 环境变量详解及实例
Linux环境变量 ~/.bash_profile && ~/.bashrc 用户登陆Linux操作系统的时候,"/etc/profile", "~/.b ...
- Linux磁盘阵列技术详解(三)--raid 5和raid 10的创建 推荐
先来看一下raid 5: ① 分区 ② 创建raid 5 mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 /dev/sde{1,2,3,4} ③ 模拟磁盘故障 这里其实和rai ...
- java 编程 pdf linux_Linux编程技术详解.pdf
Linux编程技术详解全面介绍了linux编程相关的知识,内容涵盖linux基本知识.如何建立linux开发环境.linux开发工具.linux文件系统.文件i/o操作.设备文件.进程与进程环境.守护 ...
- 嵌入式linux mtd,嵌入式Linux驱动设备之MTD技术详解
原标题:嵌入式Linux驱动设备之MTD技术详解 MTD(memory technology device内存技术设备)是用于访问memory设备(ROM.flash)的Linux的子系统. MTD的 ...
最新文章
- 汇编(8086cpu): 地址寄存器
- centos 调整home分区xfs_Linux中对lvm逻辑卷分区大小的调整教程(针对xfs与ext4不同文件系统)...
- c mysql 设置字符集_C语言如何查看和修改MySQL使用的字符集
- centos7 nat模式配置静态ip_Centos7设置静态IP后无法上网的解决方法
- Elasticsearch单机安装
- 特斯拉下一代Roadster跑车生产时间再度推迟至2023年
- Requests API
- [转]【Linux】一幅图秒懂LoadAverage(负载)
- 微信机器人开发SDK使用教程--删除朋友圈
- springmvc 响应封装_SpringMVC 封装返回结果对象
- mysql 完整性的概念_MySQL中一些深入概念整理
- 项目设计----会员充值(基础)
- 第二届广东省大学生网络攻防大赛 simple_re
- 一文搞掂十大经典排序算法
- API-String中的某些方法
- formality: 形式验证流程
- c语言数组顺时针旋转90度,算法:数组顺时针、逆时针90度旋转
- display-table制作表格
- 企业级智能RPA平台功能
- 出现Cannot resolve plugin XXX的解决办法
热门文章
- 拥抱ROS2系列:ROS2概述和实践入门(一)
- 深度学习(六十六)生成模型、最大化似然、KL散度
- vector与array之间转换,向量与数据之间转换
- java 序列化异常_关于spring:Java序列化异常消息
- ResNet原理和实现
- 32f4 usb 升级程序_不断中招的你还放心升级win10吗?wi10近期更新问题及解决办法...
- vuex使用模块的时候 获取state里的数据语法
- wangEditor3菜单修改之如何添加分割线
- SpringBoot 中的事务处理 @Transactional
- Thymeleaf模板如何获取springMVC返回的model值