linux kernel 的 procfs sysfs 对查问题的帮助
遇到进程卡死,没有gdb 符号表;只能strace 跟踪处理分析
排查过程:
1、ps -aux 查看卡死进程pid
2、strace -T -tt -e trace=all -p 查看卡死进程系统调用信息
此时卡在read 系统调用上, read 的第一个参数为句柄
3、ls -l /proc/pid/fd
可以看到fd的指向的是哪个socket 或者文件以及innode
4、cat /proc/net/tcp 可以查看inode 信息
5、lsof 查看文件相关信息
就可以根据fd 找到对应的连接
- dynamic debug动态打印
- printk_once , 只打印一次。
- 有些情况下,需要kernel运行时动态打印与否,dynamic debug就派上用场了。
- 具体用法可以参考: kernel/Documentationdynamic-debug-howto.txt
- 使用步骤:
- // 打印
- echo 'file nand.c line 4210 +p' > /sys/kernel/debug/dynamic_debug/control
- // 不打印
- echo 'file nand.c line 4210 -p' > /sys/kernel/debug/dynamic_debug/control
- // 使用例子
- pr_debug(" dynamic debug \n");
kprobe:
- * specify pre_handler address
- */
- kp.pre_handler=handler_pre;
- /* specify post_handler address
- */
- kp.post_handler=handler_post;
- /* specify fault_handler address
- */
- kp.fault_handler=handler_fault;
- /* specify the address/offset where you want to insert probe.
- * You can get the address using one of the methods described above.
- */
- kp.addr = (kprobe_opcode_t *) kallsyms_lookup_name("do_fork");
- /* check if the kallsyms_lookup_name() returned the correct value.
- */
- if (kp.add == NULL) {
- printk("kallsyms_lookup_name could not find address
- for the specified symbol name\n");
- return 1;
- }
- /* or specify address directly.
- * $grep "do_fork" /usr/src/linux/System.map
- * or
- * $cat /proc/kallsyms |grep do_fork
- * or
- * $nm vmlinuz |grep do_fork
- */
- kp.addr = (kprobe_opcode_t *) 0xc01441d0;
- /* All set to register with Kprobes
- */
- register_kprobe(&kp);
- 然后在 init_moudle 中注册的探测器
Kprobes 的好处有很多。不需要重新编译和重新引导内核就可以插入 printk。为了进行调试可以记录 处理器寄存器的日志,甚至进行修改 —— 不会干扰系统。类似地,同样可以无干扰地记录 Linux 内核数据结构的日志,甚至 进行修改
linux kernel 的 procfs sysfs 对查问题的帮助的更多相关文章
- (转)Linux 文件系统:procfs, sysfs, debugfs 用法简介
网址:http://www.tinylab.org/show-the-usage-of-procfs-sysfs-debugfs/ 1 前言 内核中有三个常用的伪文件系统:procfs,debugfs ...
- 深入linux kernel内核配置选项
============================================================================== 深入linux kernel内核配置选项 ...
- 编译linux kernel及制作initrd ( by quqi99 )
编译linux kernel及制作initrd ( by quqi99 ) 作者:张华 发表于:2013-01-27 ( http://blog.csdn.net/quqi99 ) 运行一个l ...
- Linux Kernel - Debug Guide (Linux内核调试指南 )
http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级 ...
- Linux Kernel代码艺术——系统调用宏定义
我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量.宏.函数等的定义处.但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数 ...
- Intel 80x86 Linux Kernel Interrupt(中断)、Interrupt Priority、Interrupt nesting、Prohibit Things Whthin CPU In The Interrupt Off State
目录 . 引言 . Linux 中断的概念 . 中断处理流程 . Linux 中断相关的源代码分析 . Linux 硬件中断 . Linux 软中断 . 中断优先级 . CPU在关中断状态下编程要注意 ...
- Linux Kernel CMPXCHG函数分析
原文地址:http://blog.csdn.net/penngrove/article/details/44175387 最近看到Linux Kernel cmpxchg的代码,对实现很不理解.上网查 ...
- Linux kernel scriptes bin2c "\x"
/**************************************************************************** * Linux kernel scripte ...
- Linux Kernel Schduler History And Centos7.2's Kernel Resource Analysis
本文分为概述.历史.el7.2代码架构图解三部分. 解决的问题: a.Kernel调度发展过程: b.以架构图的方式,详解el7.2具体调度实现.内核线程模型.调度时间片计算,以及探究整个Kernel ...
随机推荐
- Python数据类型---数值类型
一.整数(Integer)简称Int,又称整型,由正整数.负整数.0构成,不包括小数,分数. a,b=1,2 #一种赋值方法,此时a=1,b=2 print(a+b) #加法 3 print(a-b) ...
- 2014年 实验二 B2C网上购物
实验二 B2C网上购物 [实验目的] ⑴.熟悉虚拟银行和网上支付的应用 ⑵.熟悉并掌握消费者B2C网上购物和商家的销售处理 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网 (3) ...
- 多测师讲解html _段落标签002_高级讲师肖sir
<html> <head> <meta charset="UTF-8"> <title>段落标签</title> < ...
- Celery---一个懂得异步任务,延时任务,周期任务的芹菜
Celery是什么? celey是芹菜 celery是基于Python实现的模块,用于执行异步延时周期任务的 其结构组成是由 1.用户任务 app 2.管道任务broker用于存储任务 官方推荐red ...
- 程序员,想被别人发掘?那你有 freestyle 吗?
程序员群体是偏内向的,整天和计算机打交道,用代码说话,接受任务,默默工作. 如果这些任务是有挑战性的还行,你的工作成果就能帮你说话,可是大部分工作都是普普通通的,甚至有点儿重复性的劳动. 这个时候表面 ...
- asp.net 获取网站根目录总结 Global.asax文件里获取获取网站根目录
1: 获取网站根目录的方法有几种如: Server.MapPath(Request.ServerVariables["PATH_INFO"])Server.MapPath(&qu ...
- Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!
前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...
- C++实现求离散数学命题公式的真值表
一.实验内容 (1)求任意一个命题公式的真值表. (2)利用真值表求任意一个命题公式的主范式. (3)利用真值表进行逻辑推理. 注:(2)和(3)可在(1)的基础上完成. 二.实验目的 真值表是命题逻 ...
- apktool的下载,安装,反编译和重新打包
一.环境要求 安装java 1.8 以上 命令行运行 java -version 返回版本大于1.8 如果没有,请安装java 1.8 二.下载与安装 下载apktool_x.x.x.jar到本地 官 ...
- LruCache缓存bitmap(一)
Lrucache是把图片缓存到内置sd卡,设置缓存容量为系统分配容量的八分之一,单位byte,超过缓存容量gc会自动回收不长使用的缓存.觉得lrucache就先map一样,放入键值对就行了,比较方便, ...