2017-09-26 34 views
9

我试图使用trace-cmd来收集有关我看到的内核崩溃的更多信息。不幸的是,内核因“内核恐慌 - 不同步”消息而崩溃(即不刷新套接字和文件缓冲区,因此崩溃时在缓冲区中的任何内容都不可避免地丢失)。使用trace-cmd/ftrace在发生panic()之前获取function_graph

有没有办法来

  1. trace-cmd进程刷新其缓冲区文件系统或插座?或
  2. 使trace-cmd/ftrace避免缓冲(即在场景后面调用printk()并使用netconsole)?

因为我运行的是,在虚拟化环境中trace-cmd命令,然后我不在乎硬盘驱动器可能会偶尔出现了问题,因为我可以简单地恢复到持续良好的快照或重新部署的VM。

回答

2

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

在第一次尝试无缓冲的trace-cmd所有输出。你可以找到一些食谱,做到这一点还有https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe

第二,内核治疗上写的恐慌FS是非常危险的,这是很正常,但是你可以尝试死前信息的最后叮咬存储坠毁机之外。尝试将您的关键信息重定向到串行端口或网络连接,并在另一端捕获它。像

unbuffer trace-cmd >/dev/ttyS0 

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

+0

这并没有解决问题,因为我相信ftrace和trace-cmd之间还有另一个缓冲区。 unbuffer只能解开STDOUT,对吧? –

+0

当然可以。这种方法只是尝试减少缓冲。 另一种方法是尽量避免恐慌,并让内核工作时间更长,但结果不可预知。 您可以禁用多种情况下的恐慌。查看“/ proc/sys/kernel/*文档”(https://www.kernel.org/doc/Documentation/sysctl/kernel.txt)中的“panic_on_ *”设置。 – MrCryo

相关问题