在panic()发生之前使用trace-cmd / ftrace来获取function_graph

时间:2017-09-26 18:53:51

标签: linux-kernel crash panic ftrace

我正在尝试使用trace-cmd来收集有关我看到的内核崩溃的更多信息。不幸的是,内核崩溃时出现“内核崩溃 - 不同步”消息(即套接字和文件缓冲区没有刷新,因此崩溃时缓冲区中的任何内容都不可避免地丢失)。

有没有办法

  1. 强制trace-cmd进程将其缓冲区刷新到文件系统或套接字? OR
  2. make trace-cmd / ftrace以避免缓冲(即在场景后面调用printk()并使用netconsole)?
  3. 由于我在虚拟化环境中运行trace-cmd命令,因此我不关心硬盘驱动器是否偶尔会损坏,因为我可以简单地恢复到最后一个好的快照或重新部署VM。

1 个答案:

答案 0 :(得分:2)

我不能保证我的食谱会帮助你,但谁知道:)。

首先尝试取消缓冲trace-cmd的所有输出。您可以在https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe

找到一些配方

其次,内核对待恐慌写FS是非常危险的,这是可以的,但是你可以尝试在崩溃的机器之外的死亡之前存储最后的信息。尝试将关键信息重定向到串行端口或网络连接,并在另一端捕获它。像

unbuffer trace-cmd >/dev/ttyS0

另一种方法是尝试避免恐慌,让内核工作时间更长但结果不可预测。您可以针对多种情况禁用恐慌。查看panic_on_*目录中的/proc/sys/kernel/设置。更多详情可在“Documentation for /proc/sys/kernel/

中找到