アプリケーションが作成したファイルを確認するには?

アプリケーションが作成したファイルを確認するには?

私のシステムでsar報告された平均ディスク書き込み速度は約5 MB / sです。使用しながらdstat永久的ではありませんが、30-50MB/sのスパイクが発生してスリープ状態になります。

それを使って、iotop私はほとんどの書き込みがアプリによって行われていることを発見しました(しかしそれがどれほど確実かはわかりません)。

を使用すると、straceアプリfatraceが開き、別のディレクトリにファイルが作成され、そのファイルを閉じたり削除したりすることができます。文書はたくさんありますstraceが、テキストはあまりありません。増え続けるファイル(ログなど)があるかどうかを調べるために追加情報を見つけましたが、見つかりません/proc/pid/fdでした。だから私の結論は、すべての書き込みがアプリケーションによって生成された小さな一時ファイルを介して実行されることです。

各ファイルにどのくらい記録されているかを確認するには?各ファイルに書き込まれたバイト数を含むレポートが必要です。

これを行う方法はありますか?各ファイルの変更を確認または使用するなど、openシステムコールを再作成または使用することを検討しましたが、より簡単な方法があることを願っています。writesystemtap

答え1

ブレンデン・グレッグのiosnoop(彼の一部)perf-tools)はアプリケーションのI / Oに関する詳細情報を提供します。たとえば、次のようになります。

# ./iosnoop
Tracing block I/O... Ctrl-C to end.
COMM             PID    TYPE DEV      BLOCK        BYTES     LATms
supervise        1809   W    202,1    17039968     4096       1.32
supervise        1809   W    202,1    17039976     4096       1.30
tar              14794  RM   202,1    8457608      4096       7.53
tar              14794  RM   202,1    8470336      4096      14.90
tar              14794  RM   202,1    8470368      4096       0.27
tar              14794  RM   202,1    8470784      4096       7.74
tar              14794  RM   202,1    8470360      4096       0.25
tar              14794  RM   202,1    8469968      4096       0.24
tar              14794  RM   202,1    8470240      4096       0.24
[...]

(以下から取り込んだ例彼のブログ)。

これを使用して、システム内のすべてのI / Oを追跡したり(上記のように)単一プロセスまたはデバイスに制限したりできます。

答え2

試してみることができます(通常はカーネル2.6からパッケージ化されていますinotify)。inotify toolsファイルシステムの一部を監視し、ファイルやディレクトリの作成/削除などのイベントを通知します。

簡単な使い方は次のとおりです。

inotifywait -m -r /tmp/

その後、ファイルシステムアクティビティが発生すると、次のようになります。

#=> I'm creating /tmp/b
/tmp/ CREATE,ISDIR b
/tmp/ OPEN,ISDIR b
/tmp/ ACCESS,ISDIR b
/tmp/ CLOSE_NOWRITE,CLOSE,ISDIR b

man inotifywaitそしてman inotifywatchもっと学びましょう。

広いファイルシステムでinotifyを使用することはリソース集約的です。

statこれを(例:ビュー所有者)および/またはlsof(現在開いているすべてのファイルとそのプロセスの表示)と組み合わせると、誰が責任を持っているかについてのより多くの手がかりを得ることができます。

編集する:inotifyと組み合わせの例stat

inotifywait -m -r /tmp --format "%w%f" -e modify | while read newfile
do
  echo $newfile $(stat -c "%s" $newfile) bytes
done

すると、次のように出力されます。

/tmp/oaoa 24 bytes
/tmp/oaoa 24 bytes
/tmp/.com.google.Chrome.iLdh1J 0 bytes
/tmp/.com.google.Chrome.iLdh1J 1472 bytes

関連情報