実行中のプロセスのディスク容量要件を監視したいと思います。理想的には、プロセスを指し示し、それに起因する使用済みディスクスペースの正味の変化を見つけられるようにしたいと思います。Linuxでこれを行う簡単な方法はありますか?(DTraceを使用してSolarisでこれを行うことは、それほど簡単ではないかもしれませんが、実現可能であると確信しています)
3 に答える
おそらく、それをptraceして(またはstraceを取得して、出力を解析して)、使用されているディスクを特定する必要があります。
トレースプロセスでは、ディスクスペースを使用するファイル操作を理解する必要があり、競合状態が発生しないため、これは簡単ではありません。ただし、概算ができる場合があります。
ほとんどのLinuxファイルシステムは「穴」をサポートしているため、かなり多くのことがディスクスペースを使い果たす可能性があります。会計目的でも穴を数えることができると思います。
もう1つの問題は、どのファイルシステム操作がディスク領域を解放するかを知ることです。たとえば、書き込み用にファイルを開くと、場合によってはファイルが切り捨てられることがあります。これにより、明らかにスペースが解放されます。同様に、ファイルの名前を変更すると、既存のファイルに名前を変更した場合にスペースを解放できます。
もう1つの問題は、ヘルパープロセスを呼び出して処理を実行するプロセスです。たとえば、myprogがsystem( "rm -rf somedir")を実行する場合です。
また、ファイルシステムから削除されても別のプロセスによって開かれている可能性があるため、ファイルが完全に削除されたことを知るのはやや困難です。
ハッピーハッキング:)
監視するプロセスのPIDがわかっている場合は、でそれに関する多くの情報を見つけることができます/proc/<PID>
。
このファイル/proc/<PID>/io
には、プロセスによって読み書きされたバイトに関する統計が含まれています。これは、探しているものである必要があります。
さらに、/proc/<PID>/fd/
プロセスによって開かれたすべてのファイルへのリンクが表示されるので、それらを監視できます。