2017-09-26 1 views
9

trace-cmdを使用して、私が見ているカーネルクラッシュに関する詳細情報を収集しようとしています。残念ながら、カーネルは「カーネルパニック - 同期していません」というメッセージでクラッシュします(つまり、ソケットとファイルのバッファはフラッシュされないため、クラッシュ時にバッファに残ったものは必然的に失われます)。panic()が発生する直前にtrace-cmd/ftraceを使用してfunction_graphを取得します

  1. trace-cmdプロセスにそのファイルシステムにバッファまたはソケットをフラッシュする:

    する方法はありますか? OR

  2. バッファリングを避けるためにtrace-cmd/ftraceを作成します(つまり、シーンの背後でprintk()を呼び出してnetconsoleを使用します)?

私は単純に良いスナップショット続くか、VMを再デプロイする元に戻すことができるため、仮想化環境でのtrace-cmdコマンドは、私は、ハードドライブは時折破損することがありますことを気にしないことを実行していますので。

答えて

2

私は私のレシピは、あなたが役立ちますが、誰もが知っている:)

を最初の試みでtrace-cmdのすべての出力をバッファー解除することを保証することはできません。あなたはこれを行うためのいくつかのレシピを見つけることができますhttps://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe

第2に、カーネルはパニック時の書き込みFSを処理することは非常に危険です。しかし、大丈夫ですが、クラッシュしたマシンの外で死に至る前に情報を最後に保存しようとする可能性があります。重要な情報をシリアルポートまたはネットワーク接続にリダイレクトして、相手側にキャッチしてください。同様に

unbuffer trace-cmd >/dev/ttyS0 

もう1つの方法は、パニックを避けるようにして、予測不能な結果でカーネルを長くすることです。いくつかのケースでパニックを無効にすることができます。 /proc/sys/kernel/ディレクトリのpanic_on_*の設定を見てください。詳細は、「Documentation for /proc/sys/kernel/

+0

ftraceとtrace-cmdの間に別のバッファがあると考えられるため、これで問題は解決しませんでした。バッファーはSTDOUTをアンバッファーするだけです。 –

+0

はい、もちろんです。このアプローチは単にバッファリングを減らそうとします。 もう1つの方法は、パニックを回避して、予測不能な結果でカーネルを長くすることです。 いくつかのケースでパニックを無効にすることができます。 "/ proc/sys/kernel/*のドキュメント"(https://www.kernel.org/doc/Documentation/sysctl/kernel.txt)の "panic_on_ *"の設定を見てください。 – MrCryo

関連する問題