2017-09-26 63 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

相關問題