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

是否可以使用:

  • 强制trace-cmd进程将其缓冲区刷新到文件系统或套接字吗?或
  • 使trace-cmd/ftrace避免缓冲(即在后台调用printk()并使用netconsole)?

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

    最佳答案

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

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

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

    unbuffer trace-cmd >/dev/ttyS0
    

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

    关于linux-kernel - 在panic()发生之前使用trace-cmd/ftrace获取function_graph,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46433827/

    10-13 06:14