能否使用ftrace调试kernel panic?澄清其用途疑问
能否用ftrace调试Kernel Panic?
当然可以用ftrace调试kernel panic,它的能力远不止性能问题排查,在定位内核崩溃根源时同样实用——核心思路是通过ftrace记录panic发生前的内核执行流程,从而还原崩溃场景。
核心用法示例
开启panic自动dump追踪数据
内核提供ftrace_dump_on_oops参数,开启后系统触发oops或panic时,会自动将ftrace缓冲区的追踪内容输出到控制台(或串口),无需手动提前抓取。- 临时生效:
echo 1 > /proc/sys/kernel/ftrace_dump_on_oops - 永久生效:在系统启动参数中添加
ftrace_dump_on_oops=1
- 临时生效:
提前配置针对性追踪规则
根据疑似触发panic的模块或场景,提前设置ftrace的追踪范围,确保捕获关键执行路径:- 追踪特定函数调用链:使用
functiontracer,先切换追踪器:echo function > /sys/kernel/debug/tracing/current_tracer,再通过过滤规则指定目标函数:echo "ext4_*" > /sys/kernel/debug/tracing/set_ftrace_filter(以ext4文件系统相关函数为例)。 - 追踪内核事件:比如开启调度事件追踪:
echo 1 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable,用于排查调度相关的panic。
- 追踪特定函数调用链:使用
注意事项
- 调整缓冲区大小:ftrace默认缓冲区较小,若panic前执行路径较长,关键数据可能被覆盖。可通过
echo 16384 > /sys/kernel/debug/tracing/buffer_size_kb(设置16MB)扩大缓冲区。 - 避免panic后自动重启:若系统panic后立即重启,可能无法查看ftrace输出,可设置
panic_timeout=-1(启动参数或写入/proc/sys/kernel/panic)让系统崩溃后保持挂起状态,方便抓取日志。
内容的提问来源于stack exchange,提问作者JSE
相关产品推荐
相关产品推荐

