私の状況では、特定のプロセス(この場合はThunderbird)が1分ほどユーザー入力に反応しないことがあります。 iotop
を使用すると、この間、ディスクにかなりの量が書き込まれることがわかりました。次に、どのファイルに書き込むかを調べたいのですが、残念ながらiotop
はプロセスごとの統計情報しか提供しません。開いているファイルごとではありません(-記述子)。
lsof
を使用して、プロセスが現在開いているファイルを見つけることができることは知っていますが、もちろんThunderbirdでは多くのファイルが開いているため、これはあまり役に立ちません。 iostat
は、デバイスごとの統計のみを表示します。
この問題はランダムにのみ発生し、表示されるまでにかなりの時間がかかる可能性があるため、Thunderbirdを追跡して長いログを調べて、書き込みが最も多いファイルを見つける必要がないことを願っています。
ハングしたときにプロセスにstraceをアタッチすると(予備の端末でpidを取得してコマンドを事前にキューに入れることができます)、ブロッキング書き込みのファイル記述子が表示されます。
簡単な例:
$ mkfifo tmp
$ cat /dev/urandom > tmp &
[1] 636226
# this will block on open until someone opens for reading
$ exec 4<tmp
# now it should be blocked trying to write
$ strace -p 636226
Process 636226 attached - interrupt to quit
write(1, "L!\f\335\330\27\374\360\212\244c\326\0\356j\374`\310C\30Z\362W\307\365Rv\244?o\225N"..., 4096 <unfinished ...>
^C
Process 636226 detached
私はあなたがルートアクセス権を持っています、私は最高のツールは 監査サブシステム だと思います。それについての文献はあまりありません(しかし、loggedfsについて以上のものです)。 このチュートリアル または afewexamples または auditctl
manページ 。ここでは、デーモンが起動していることを確認してから、auditctl
をrootとして実行するだけで十分です。
auditctl -a exit,always -F pid=1234 -F dir=/home/philipp
これは、pid 1234のプロセスが/var/log/audit/audit.log
の下のどこかに書き込むたびに、/home/philipp
のログに書き込みます。オーバーヘッドはかなり小さく、strace
よりもはるかに小さいです。