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

Han*_*olo 9 crash ftrace linux-kernel panic

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

有办法:

  1. 强制trace-cmd进程将其缓冲区刷新到文件系统或套接字?要么
  2. make trace-cmd/ftrace以避免缓冲(即在场景后面调用printk()并使用netconsole)?

由于我trace-cmd在虚拟化环境中运行该命令,因此我不关心硬盘驱动器是否偶尔会损坏,因为我可以简单地恢复到最后一个良好的快照或重新部署VM.

MrC*_*ryo 2

我不能保证我的食谱对你有帮助,但谁知道呢:)

首先尝试取消缓冲 的所有输出trace-cmd。你可以在那里找到一些食谱来做到这一点https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe

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

unbuffer trace-cmd >/dev/ttyS0
Run Code Online (Sandbox Code Playgroud)

另一种方法是尝试完全避免恐慌并让内核工作更长时间,但结果不可预测。您可以在多种情况下禁用恐慌。查看目录panic_on_*中的设置/proc/sys/kernel/更多详细信息可以在“ /proc/sys/kernel/ 的文档”中找到