步骤

安装新内核,记住 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 系统上如何安装调试信息包:

  1. 安装 yum-utils。它提供 debuginfo-install 命令。
  2. 启用 Debuginfo Yum 源,修改 /etc/yum.repos.d/CentOS-Debuginfo.repo,将 enabled 改为 1
  3. 安装 debuginfo 包(将 grep 改为你需要的包名,实际上即安装 grep-debuginfo): debuginfo-install grep
  4. 至此安装完成,可以用 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配置调试方法相关推荐

  1. [Linux]core文件调试方法

    来源: shaovey的专栏 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息).使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行 ...

  2. 最新历史版本 :LINUX KERNEL 配置编译中文指南

    LINUX KERNEL 配置编译中文指南 序言 近几年,linux大行其道,令不满windows蓝屏的使用者跃跃欲试,结果发现linux安装不及windows方便,界面不及windows友好,配置不 ...

  3. Linux kernel panic解决方法

    Linux kernel panic解决方法 kernel panic错误表现 kernel panic 主要有以下几个出错提示: Kernel panic-not syncing fatal exc ...

  4. linux下gdb调试方法和技巧详解

    linux下gdb调试方法和技巧整理 简介 UNIX或者UNIX-like下调试工具 启动gdb # 1. 在可执行程序不需要输入参数时,我们可以使用 gdb + 可执行程序 gdb ./typeid ...

  5. linux 文件系统 panic,Linux kernel panic解决方法

    Linux kernel panic解决方法 kernel panic错误表现 kernel panic 主要有以下几个出错提示: Kernel panic-not syncing fatal exc ...

  6. linux grep 去重_GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 - NTP校时服务器...

    GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 京准电子科技官微--ahjzsz 第一种方法: 系统使用命令行配置: 在 L ...

  7. linux kernel 配置(部分) 部分内容翻译自内核帮助文档

    linux kernel 2.6.13 在配置内核前,你应当对详细的了解运行内核的系统,根据自己的需要配置内核. 下面,我将解释内核的各个选项,并根据本人的机器作相应的配置. 在此之前,我把机器硬件参 ...

  8. Linux kernel panic问题解决方法

    kernel panic错误表现 kernel panic 主要有以下几个出错提示: Kernel panic-not syncing fatal exception in interrupt ker ...

  9. Linux应用程序调试方法

    1.概述     可应用与嵌入式的操作系统有Linux.VxWorks等,VxWorks的调试较简单,因为没有虚拟内存的限制,所以支持直接修改内存数据,且支持符号表,因此在shell中可以直接数据全局 ...

  10. linux应用程序调试方法,Linux应用程序使用写文件调试程序的方法

    Linux,一切皆文件,那么在Android系统本身,也是Linux+java罢了,也是在Linux的运行环境下. 通常,我们在调试程序的都会使用printf. 在Android中,我们会去使用log ...

最新文章

  1. linux系统qt中make安装,Linux系统下Qt的基本安装和配置
  2. 深入浅出python机器学习_7.1_支持向量机
  3. C++类的使用(三)—— 封装
  4. ubuntu创建新用户并设置sudo权限
  5. 致敬2016,拥抱2017
  6. ORB-SLAM介绍(无源码版本)
  7. 16软件1班安卓第一学期学习总结
  8. JDK的bin目录下所有程序的使用介绍
  9. struts的action属性自动注入原理
  10. 数据库—事务—并发控制技术
  11. java识别图片验证码_JAVA---获取图片验证码
  12. 一部火了20年的音乐剧,到底有何魅力?
  13. Mongodb实战:豆瓣电影排行榜分析及结果展示设计
  14. python实现em聚类算法_EM算法的python实现的方法步骤
  15. echart各种显示数据的格式化
  16. 第五章(3)行逻辑链接的顺序表
  17. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Android高级篇下)...
  18. Html5大文件断点续传实现方法
  19. (WSL) Linux显示自己的系统logo ---- screenfetch
  20. flex中换行符的使用

热门文章

  1. cadence导入dxf文件_Allegro导入DXF的方法
  2. CTF 内存取证 USB流量分析
  3. oracle 修改pkg命令,Oracle PKG创造
  4. android mcc mnc,SystemUI如何获得SIM卡相关的mcc/mnc值
  5. 设置图片的透明度从左到右渐变
  6. matlab中关于变量名的规定,在MATLAB中,以下变量名命名正确的是()A:052DB:H123C:_12D:1_D...
  7. 世界顶级的程序员们都在读哪些书?
  8. 一个简单的HTML网页 故宫学生网页设计作品 dreamweaver作业静态HTML网页设计模板 旅游景点网页作业制作
  9. charles连接不上手机
  10. linux命令 sys,用syslinux引导多个linux系统