linux kernel配置调试方法
步骤
安装新内核,记住 grub 的序号,修改 grub.conf
将默认内核改成一个正常可用内核,而不是新安装的内核。
新内核启动时加入panic=5,使新内核启动失败后自动重启。
grub下次重启后进入新内核,使新内核仅在下次重启作为默认内核。一旦发生再次重启,就会按照进入 grub.conf 指定的默认内核。
root 权限运行 grub 命令,进入 grub 命令行。在 grub 命令行中运行(假设新内核的序号为 0),savedefault --default=0 --once,输入 quit 以离开 grub 命令行,通过 crontab 设置机器自动重启。
运行 crontab -e,进入 crontab 配置文件,加入一行*/15 * * * * reboot。
重启系统,如果能正常进入新内核,则运行 crontab -e,删除 reboot 的一行。
系统性能分析工具perf
内置于Linux内核源码树中的性能剖析工具。基于事件采样原理以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。常用于性能瓶颈的查找与热点代码的定位。举例:
perf top
# perf top // 默认配置
# perf top -G // 得到调用关系图
# perf top -e cycles // 指定性能事件
# perf top -p 23015,32476 // 查看这两个进程的cpu cycles使用情况
# perf top -s comm,pid,symbol // 显示调用symbol的进程名和进程号
# perf top --comms nginx,top // 仅显示属于指定进程的符号
# perf top --symbols kfree // 仅显示指定的符号
perf stat
执行10次程序,给出标准偏差与期望的比值:
# perf stat -r 10 ls > /dev/null
显示更详细的信息:
# perf stat -v ls > /dev/null
只显示任务执行时间,不显示性能计数器:
# perf stat -n ls > /dev/null
单独给出每个CPU上的信息:
# perf stat -a -A ls > /dev/null
ls命令执行了多少次系统调用:
# perf stat -e syscalls:sys_enter ls
perf record
记录nginx进程的性能数据:
# perf record -p `pgrep -d ',' nginx`
记录执行ls时的性能数据:
# perf record ls -g
记录执行ls时的系统调用,可以知道哪些系统调用最频繁:
# perf record -e syscalls:sys_enter ls
参考:
系统级性能分析工具 — Perf_zhangskd的专栏-CSDN博客_perf top
Linux 性能诊断 perf使用指南-阿里云开发者社区
http://kernel.taobao.org/index.php?title=Documents/Kernel_Perf
火焰图制作工具:
GitHub - brendangregg/FlameGraph: Stack trace visualizer
内核调试技巧
Kdump&Crash 调试技巧
安装Kdump和Crash
yum install kexec-tools
yum install crash
参考: Kdump & Crash 学习笔记(一)
配置Kdump
参考:Kdump & Crash 学习笔记(二)
参考:Kdump & Crash 学习笔记(三)
objdump 应用
常用命令:
objdump -x obj 以某种分类信息的形式把目标文件的数据组织(被分为几大块)输出 <可查到该文件的所有动态库>
objdump -t obj 输出目标文件的符号表()
objdump -h obj 输出目标文件的所有段概括()
objdump -j .text/.data -S obj 输出指定段的信息,大概就是反汇编源代码把
objdump -S obj C语言与汇编语言同时显示
参考:gcc命令objdump用法
SystemTap
以下介绍 SystemTap 完整环境的配置流程。完整环境即支持从 SystemTap 脚本解析到 SystemTap 运行的完整流程的环境。
安装内核开发包 kernel-devel:
查看当前内核的开发包是否已安装: rpm -q kernel-devel-`uname -r`。
若未安装:如果使用 CentOS 标准内核,则用 yum 安装:yum install kernel-devel。
如果新安装 kernel-devel 与当前运行内核版本不匹配,则还需要更新内核并重启:yum update kernel; reboot。
安装内核调试信息包 kernel-debuginfo(内核态跟踪需要)。
如果是要跟踪用户态程序,而非内核本身,则可略过此步。
查看当前运行内核的调试信息包是否已安装: rpm -q kernel-debuginfo-`uname -r`。
若未安装:
如果使用 CentOS 标准内核,则用 yum 安装:yum install /usr/bin/debuginfo-install; debuginfo-install kernel。
如果新安装 kernel-debuginfo 与当前运行内核版本不匹配,则还需要更新内核并重启:yum update kernel kernel-devel reboot。
安装内核调试源码包 kernel-debuginfo-common内核源码仅为了编写 SystemTap 脚本时作参考之用。
可直接参考 git 仓库中的代码。
查看当前运行内核的调试源码包是否已安装: rpm -q kernel-debuginfo-`uname -m`-`uname -r`
若未安装:
如果使用 CentOS 标准内核,则安装 kernel-debuginfo 时会自动通过依赖安装上对应的 kernel-debuginfo-common内核 debuginfo 包的组织。
内核的 debuginfo 包除了 kernel-debuginfo 外,还有一个 kernel-debuginfo-common-x86_64 (x86_64 为系统架构代号)
kernel-debuginfo: 提供内核及内核模块的调试信息
kernel-debuginfo-common-x86_64: 提供内核源码
使用 SystemTap 进行内核级调试时,需要安装 kernel-debuginfo。kernel-debuginfo-common-x86_64 并不需要,即使使用 kernel.statement 等代码行号级别的 probe 点。 安装 SystemTap
yum install systemtap 运行示例编写简单的 SystemTap 脚本,保存为 who-is-reading.stp 如下
probe syscall.read
{
printf("[%d] %s\n", pid(), execname())
}
运行 stap who-is-reading.stp。稍等会就有很多输出。然后按 Ctrl-C 结束。
SystemTap 单纯运行环境
SystemTap 支持在单独设备上先将 SystemTap 脚本编译成 ko 文件。然后在其它设备上,仅需要 staprun 命令就能完成运行,无需在设备上安装 kernel-devel 及 kernel-debuginfo。
安装方法:yum install systemtap-runtime
SystemTap 入门
SystemTap 参考资料:Systemtap 学习
CentOS 系统上如何安装调试信息包:
- 安装 yum-utils。它提供 debuginfo-install 命令。
- 启用 Debuginfo Yum 源,修改 /etc/yum.repos.d/CentOS-Debuginfo.repo,将 enabled 改为 1
- 安装 debuginfo 包(将 grep 改为你需要的包名,实际上即安装 grep-debuginfo): debuginfo-install grep
- 至此安装完成,可以用 rpm -ql grep-debuginfo 查看实际加入了哪些文件
关于 debuginfo 包
每个带二进制程序的 RPM 包,在打包时,都会产生一个对应的 debuginfo 包,如 grep => grep-debuginfo。
二进制文件通常即为 ELF 为件,如可执行文件(/bin/grep),以及动态库(/lib64/libc.so)
debuginfo 包中主要包含两类内容二进制文件的调试信息,即编译过程生成的符号表。
以相同路径安装于 /usr/lib/debug/ 目录下,二进制文件文件名加上 .debug 后缀二进制文件对应的程序源码。
以 rpmbuild 的 BUILD 路径,安装于 /usr/src/debug 下。
Kdump 和 Crash 技术
参见:Kdump和Crash的配置方法与内核故障原因分析
Netconsole 技术
参见:Linux配置Netconsole远程打印日志信息
linux kernel配置调试方法相关推荐
- [Linux]core文件调试方法
来源: shaovey的专栏 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息).使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行 ...
- 最新历史版本 :LINUX KERNEL 配置编译中文指南
LINUX KERNEL 配置编译中文指南 序言 近几年,linux大行其道,令不满windows蓝屏的使用者跃跃欲试,结果发现linux安装不及windows方便,界面不及windows友好,配置不 ...
- Linux kernel panic解决方法
Linux kernel panic解决方法 kernel panic错误表现 kernel panic 主要有以下几个出错提示: Kernel panic-not syncing fatal exc ...
- linux下gdb调试方法和技巧详解
linux下gdb调试方法和技巧整理 简介 UNIX或者UNIX-like下调试工具 启动gdb # 1. 在可执行程序不需要输入参数时,我们可以使用 gdb + 可执行程序 gdb ./typeid ...
- linux 文件系统 panic,Linux kernel panic解决方法
Linux kernel panic解决方法 kernel panic错误表现 kernel panic 主要有以下几个出错提示: Kernel panic-not syncing fatal exc ...
- linux grep 去重_GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 - NTP校时服务器...
GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 京准电子科技官微--ahjzsz 第一种方法: 系统使用命令行配置: 在 L ...
- linux kernel 配置(部分) 部分内容翻译自内核帮助文档
linux kernel 2.6.13 在配置内核前,你应当对详细的了解运行内核的系统,根据自己的需要配置内核. 下面,我将解释内核的各个选项,并根据本人的机器作相应的配置. 在此之前,我把机器硬件参 ...
- Linux kernel panic问题解决方法
kernel panic错误表现 kernel panic 主要有以下几个出错提示: Kernel panic-not syncing fatal exception in interrupt ker ...
- Linux应用程序调试方法
1.概述 可应用与嵌入式的操作系统有Linux.VxWorks等,VxWorks的调试较简单,因为没有虚拟内存的限制,所以支持直接修改内存数据,且支持符号表,因此在shell中可以直接数据全局 ...
- linux应用程序调试方法,Linux应用程序使用写文件调试程序的方法
Linux,一切皆文件,那么在Android系统本身,也是Linux+java罢了,也是在Linux的运行环境下. 通常,我们在调试程序的都会使用printf. 在Android中,我们会去使用log ...
最新文章
- linux系统qt中make安装,Linux系统下Qt的基本安装和配置
- 深入浅出python机器学习_7.1_支持向量机
- C++类的使用(三)—— 封装
- ubuntu创建新用户并设置sudo权限
- 致敬2016,拥抱2017
- ORB-SLAM介绍(无源码版本)
- 16软件1班安卓第一学期学习总结
- JDK的bin目录下所有程序的使用介绍
- struts的action属性自动注入原理
- 数据库—事务—并发控制技术
- java识别图片验证码_JAVA---获取图片验证码
- 一部火了20年的音乐剧,到底有何魅力?
- Mongodb实战:豆瓣电影排行榜分析及结果展示设计
- python实现em聚类算法_EM算法的python实现的方法步骤
- echart各种显示数据的格式化
- 第五章(3)行逻辑链接的顺序表
- 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android高级篇下)...
- Html5大文件断点续传实现方法
- (WSL) Linux显示自己的系统logo ---- screenfetch
- flex中换行符的使用
热门文章
- cadence导入dxf文件_Allegro导入DXF的方法
- CTF 内存取证 USB流量分析
- oracle 修改pkg命令,Oracle PKG创造
- android mcc mnc,SystemUI如何获得SIM卡相关的mcc/mnc值
- 设置图片的透明度从左到右渐变
- matlab中关于变量名的规定,在MATLAB中,以下变量名命名正确的是()A:052DB:H123C:_12D:1_D...
- 世界顶级的程序员们都在读哪些书?
- 一个简单的HTML网页 故宫学生网页设计作品 dreamweaver作业静态HTML网页设计模板 旅游景点网页作业制作
- charles连接不上手机
- linux命令 sys,用syslinux引导多个linux系统