特定のディレクトリでディスクI / Oを監視するにはどうすればよいですか?


10

既知の名前を持ついくつかのプロセスがあり、すべて単一のディレクトリ内のファイルに書き込みます。(ファイルアクセスだけでなく一定期間ディスクブロックの読み取りと書き込みの数をログに記録して、パラメーターの変更によってI / Oの量が大幅に減少するかどうかをテストします。現在はを使用していますが、これはパーティション全体に限定されています。iostat -d -p



1
ファイル自体ではなく、I / Oの量に関心があるため、これはこれらの質問とは異なります。
l0b0

回答:


10

これは単純で不合理に聞こえることになると思いますが、問題のアプリを制御できる場合(おそらくテスト環境で)、そのディレクトリのみを独自のパーティションにマウントすることができiostatます。それについて、そしてその場で他に何もない。

関連する物理ドライブがある場合は、ループバックマウントアラでそれを偽造できます

dd if=/dev/zero of=/bigdisk/LOOPFILE bs=1024m count=1024m # 1gb loopback file
mke2fs -j /bigdisk/LOOPFILE
mkdir /tmpcopy
mount -o loop /tmpcopy /bigdisk/LOOPFILE
cp -r -p $SPECIALDIR2MONITOR /tmpcopy
umount /tmpcopy
mount -o loop $SPECIALDIR2MONITOR  /bigdisk/LOOPFILE,

これで競合するディスクI / Oが完全に削除されるわけではありませんが、iostat出力がユーザーのニーズにより具体的になると確信しています。


3

直接的な方法はないと思います。必要なデータを取得する1つの方法は、アクセスをログに記録する仮想ファイルシステムを介してディレクトリツリーにアクセスすることです。Loggedfsはそのようなファイルシステムの1つですが、関心のあるすべてのデータを表示できるかどうかはわかりません。

mkdir /tmp/replica
loggedfs /path/to/directory /tmp/replica
mycommand --root=/tmp/replica
fusermount -u /tmp/replica

2

inotify-toolsinotifywait -m DIRNAMEから使用できます


-dinotifywait 3.13には存在しません。もしかして-m
l0b0

@ l0b0:ああ、私はgitリポジトリの3.14を使用しています。ごめんなさい。しかし、マンページには-m、バックグラウンドで実行され、出力ファイルが必要であることを除いて、それは同じであると記載されています。
Tobias Kienzler、2011年

また-r役立つかもしれません
トビアスキエンツラー

1
それをテストしました。誤解して申し訳ありませんが、アクセスされたファイル(またはファイル数)には興味がなく、I / Oの量には興味がありません。
l0b0

2
これはLinux固有です。BSDにはkqueueとpnotifyのシステムコールがありますが、作者の要求どおりに動作するかどうかはわかりません。
Shawn J. Goff
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.