9

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

有没有办法

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

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

4

1 回答 1

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/。更多详细信息可以在“ /proc/sys/kernel/ 文档”中找到

于 2017-09-30T08:05:40.057 回答