长期支持版本

    常用工具

    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/IP地址-时间”目录下。

    步骤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即可。
    文档捉虫
    编组 3备份