私のシステムでsar
報告された平均ディスク書き込み速度は約5 MB / sです。使用しながらdstat
永久的ではありませんが、30-50MB/sのスパイクが発生してスリープ状態になります。
それを使って、iotop
私はほとんどの書き込みがアプリによって行われていることを発見しました(しかしそれがどれほど確実かはわかりません)。
を使用すると、strace
アプリfatrace
が開き、別のディレクトリにファイルが作成され、そのファイルを閉じたり削除したりすることができます。文書はたくさんありますstrace
が、テキストはあまりありません。増え続けるファイル(ログなど)があるかどうかを調べるために追加情報を見つけましたが、見つかりません/proc/pid/fd
でした。だから私の結論は、すべての書き込みがアプリケーションによって生成された小さな一時ファイルを介して実行されることです。
各ファイルにどのくらい記録されているかを確認するには?各ファイルに書き込まれたバイト数を含むレポートが必要です。
これを行う方法はありますか?各ファイルの変更を確認または使用するなど、open
システムコールを再作成または使用することを検討しましたが、より簡単な方法があることを願っています。write
systemtap
答え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