常用工具

ftrace

  1. ftrace:是一个针对linux kernel内核空间的debug工具,内核中会提供trace events供用户追踪。而ftrace则可以将events抓取出来,让用户能够直观地看到这些事件,同时也可以追踪内核的函数。
  2. ftrace的配置和使用:要使用ftrace,需要将其相关的依赖编译进内核,openEuler已经默认编译了ftrace选项,如果没开启可以在menuconfig里选择Kernel hacking -> Tracers -> Trace syscalls开启,同时还要编译debugfs,选择Kernel hacking -> Generic Kernel Debugging Instruments -> Debug Filesystem
  • ftrace的功能配置

ftrace通过debugfs向用户空间提供访问接口,内核配置debugfs后,会创建/sys/kernel/debug目录,debugfs文件系统就是挂载到该目录。如果内核支持ftrace相关的配置项后,会在debugfs下创建一个tracing目录,debugfs文件系统会挂载到该目录,该目录内容如下图所示:

  • ftrace debugfs接口介绍 用户可看到ftrace通过debugfs文件系统提供的一些控制和输出文件,如下对常用的文件做简单说明:
available_tracers:可用的跟踪程序

current_tracer:正在运行的跟踪程序

available_events:列举了系统所有可用的trace events

events:该目录对events按模块做了区分

set_event:列举当前要追踪的events

tracing_on:用于控制跟踪打开或停止,echo 0 \> tracing\_on表示关闭,1表示打开

trace:查看跟踪数据
  • 可用的跟踪程序

zh-cn_image_0000001373373585

function:一个无需参数的函数调用跟踪程序
function_graph:一个使用子调用的函数调用跟踪程序
  • 追踪event
# 先注明要追踪ras的arm_event
echo ras:arm_event > /sys/kernel/debug/tracing/set_event

# 这个文件可以看到event的具体格式,会打印什么字段
cat /sys/kernel/debug/tracing/events/ras/arm_event/format

# 启动追踪
echo 1 > /sys/kernel/debug/tracing/tracing_on

#  观察trace的输出
tail -f /sys/kernel/debug/tracing/trace

c50cb9df64f4659787c810167c89feb4_1884x257

  • 追踪内核函数入参

选择跟踪mmap,其对应系统调用do_mmap,选择输出addr入参

zh-cn_image_0000001373379529

# 通过kprobe跟踪
echo 'p:probe1 do_mmap addr=%x1' > kprobe_events

# 启用kprobe
echo 1 > events/kprobes/probe1/enable

# 启动追踪
echo 1 > tracing_on

# 查看trace数据

zh-cn_image_0000001322379488

  • 追踪函数调用
# 选择追踪类型
echo function_graph > current_tracer

# 设置过滤进程pid
echo <pid> set_ftrace_pid

# 开始追踪
echo 1 > tracing_on

# 查看trace数据

zh-cn_image_0000001322219840

strace

strace命令是一个诊断、调试工具,可以通过使用strace对应用的系统调用及信号传递来进行分析,从而达到解决问题或了解应用执行过程的目的。

可以通过strace -h来查看strace提供了哪些功能

zh-cn_image_0000001322112990

最常用的使用方式(追踪xx命令,跟踪forks,打印时间,结果输出到output文件中)

strace -f -tt -o output xx

kdump

  1. crash/kdump原理介绍

kdump是系统运行在某个时间点的内存状态的快照,便于运维人员debug分析系统挂掉的原因,常用于系统宕机和panic。

大致流程如下:

zh-cn_image_0000001321685172

  1. 相关工具安装配置
# 使用yum安装相应软件包
yum install kernel-debuginfo-$(uname -r) kexec-tools crash -y

# 设置crashkernel预留内存大小
vim /etc/default/grub

zh-cn_image_0000001372821865

# 重新生成grub配置文件
grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg
reboot

# 启动kdump服务
systemctl start kdump #启动kdump
systemctl enable kdump  #设置开机启动
  1. crash触发

操作1. 内核具备默认配置,当硬锁和oops的时候会触发panic

zh-cn_image_0000001372824637

操作2. 用户可以修改该配置,以下相关命令可使配置生效一次,重启后失效。

# 设置软锁触发panic
echo 1 > /proc/sys/kernel/softlockup_panic

# 设置kernel遇到OOM触发panic
echo 1 > /proc/sys/vm/panic_on_oom

# 进程出现hang时引发panic
echo 1 > /proc/sys/kernel/hung_task_panic

# 进程hangtask机制超时时间设置
echo 60 > /proc/sys/kernel/kernel.hung_task_timeout_secs

操作3. 如需要重启自动重启配置,将下列参数写入/etc/sysctl.conf文件,执行sysctl -p生效

kernel.hung_task_panic=1
kernel.hung_task_timeout_secs=60
kernel.softlockup_panic=1
vm.panic_on_oom=1
  1. crash分析

操作1. 开启crash调试

操作2. 生成的vmcore文件一般会在/var/crash目录下

操作3. 执行如下命令即可进入crash调试

crash {vmcore文件} {调试内核vmlinux}

zh-cn_image_0000001372748125

crash调试命令格式为 command args,command为需要执行的命令,args为部分调试命令需要的参数。

命令用途
help打印命令的help信息,可展示支持命令,也可查看具体命令的help信息,如 help bt。
bt打印函数调用栈信息。
log打印系统消息缓冲区,可追加参数,如log。
ps显示进程的状态,>表示进程为活跃状态。
dis对给定函数或者地址进行反汇编,如dis -l [func。
mount展示当前的文件系统信息

文档捉虫

“有虫”文档片段

问题描述

提交类型 issue
有点复杂...
找人问问吧。
PR
小问题,全程线上修改...
一键搞定!
问题类型
规范和低错类

● 错别字或拼写错误;标点符号使用错误;

● 链接错误、空单元格、格式错误;

● 英文中包含中文字符;

● 界面和描述不一致,但不影响操作;

● 表述不通顺,但不影响理解;

● 版本号不匹配:如软件包名称、界面版本号;

易用性

● 关键步骤错误或缺失,无法指导用户完成任务;

● 缺少必要的前提条件、注意事项等;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

正确性

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 命令、命令参数等错误;

● 代码片段错误;

● 命令无法完成对应功能;

● 界面错误,无法指导操作;

风险提示

● 对重要数据或系统存在风险的操作,缺少安全提示;

内容合规

● 违反法律法规,涉及政治、领土主权等敏感词;

● 内容侵权;

您对文档的总体满意度

非常不满意
非常满意
提交
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。