1

Linuxカーネルをダウンさせる厄介なバグを特定しようとしています。stderrにメッセージを出力していますが、stderrはログファイルにリダイレクトされます。ファイルアクセスのバッファリングを無効にする方法はありますか?カーネルがハングすると、バッファ内のメッセージが失われます。

4

3 に答える 3

1

実際にstderrは、デフォルトではバッファリングされていませんが、それは C ランタイムに関してのみだと思います。以前にこれを解決しました:

fflush (stderr); fsync (fileno (stderr));

(実際にはそうしましstdoutたが、同じルールが適用されます-実際fflushは必要ないかもしれませんがstderr、害はありません).

fflushC ランタイム バッファを OS にフラッシュし、fsync強制的にディスクに書き込みます。

これはパフォーマンスに深刻な影響を与える可能性があることに注意してください。

于 2010-05-27T08:35:35.550 に答える
0

を使用して、バッファを強制的にフラッシュできますfflush(stderr);

于 2010-05-27T08:28:02.780 に答える
0

setvbufアプリの起動時に使用を試すことができます

setvbuf(stderr, NULL, _IONBF, 0);

ただし、stdio バッファーを読み取ることはできますが、「カーネル内」のバッファーの問題が残っており、fsync しない限り解消されません。ただし、ユーザー空間からカーネルのバグを追跡することは、最善の方法ではない可能性があります。

シリアル コンソールを使用して、別のマシンで出力を取得できますか? このようにして、oops と stderr メッセージの両方を取得できます

于 2010-05-27T12:59:43.397 に答える