私の状況は、特定のプロセス(この場合はThunderbird)がユーザー入力に約1分間反応しないことがあります。私はiotop
それを使用しながらディスクに多くを記録することがわかりました。これで、どのファイルに書き込むかを知りたいのですが、残念ながら、iotop
開かれたファイル(説明者)固有の統計ではなく、プロセス固有の統計のみを提供します。
私はこれを使用して、lsof
プロセスによって現在開いているファイルが何であるかを知ることができることを知っていますが、もちろんThunderbirdは多くのファイルを開くので、あまり役に立ちません。iostat
デバイス固有の統計のみを表示します。
この問題はランダムに発生し、表示されるのにかなり長い時間がかかる可能性があるため、どのファイルに最も多くの書き込みがあるかを調べるためにThunderbirdを追跡し、長いログを記録する必要がないことを願っています。
答え1
プロセスが中断されている間にプロセスに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
答え2
ルートアクセス権がある場合、最良のツールは次のとおりです。監査サブシステム。これに関する文献はあまりありません(ただし、Loggedfsに関するもの以上)。このチュートリアルまたはㅏ 珍しい はいそれともauditctl
マニュアルページ。ここでは、デーモンが起動していることを確認してからrootauditctl
として実行するだけで十分です。
auditctl -a exit,always -F pid=1234 -F dir=/home/philipp
/var/log/audit/audit.log
これは、pid 1234のプロセスがどこかに書き込まれるたびにログに記録されます/home/philipp
。に比べてオーバーヘッドがかなり小さいですstrace
。