web-dev-qa-db-ja.com

Mac OSXでのプロセスごとのディスク読み取り/書き込み統計

Mac OSXでプロセスごとのディスクI/O統計をプログラムで取得するにはどうすればよいですか。「アクティビティモニター」アプリケーションまたは「top」コマンドでは、システム全体のディスクI/O統計しか取得できません。
参考のために PCに同様の質問をしました。

23
Raviprakash

iotop(ルートとして)を使用します。次に例を示します。

iotop -C 3 10

しかし、(私にとって)最善の方法は次のとおりです。

Sudo fs_usage -f filesys
30
slerena

これをプログラムで行う方法についてはここに答えがないので、ここにいくつかの詳細情報があります。 C/C++/ObjectiveC++を使用できる場合は、libprocからいくつかの情報を取得できます。関数 proc_pid_rusageは、特定のプロセスに関する一連のリソース情報を提供しますが、質問に関連するものは次のとおりです。

struct rusage_info_v3 {
    ...
    uint64_t ri_diskio_bytesread;
    uint64_t ri_diskio_byteswritten;
    ...
};

サンプルコード:

pid_t pid = 10000;
rusage_info_current rusage;
if (proc_pid_rusage(pid, RUSAGE_INFO_CURRENT, (void **)&rusage) == 0)
{
    cout << rusage.ri_diskio_bytesread << endl;
    cout << rusage.ri_diskio_byteswritten << endl;
}

見る <libproc.h>および<sys/resource.h>詳細については。

4
dgross

OPは特にディスクI/O統計を要求したので、私はお勧めします

Sudo fs_usage -f diskio

これは、受け入れられた回答に記載されている-f filesysとは異なり、読み取り/書き込みイベントのみに焦点を当てています。 (当時、diskioオプションが利用できなかったかどうかはわかりません。)

2
bfx

アクティビティモニターは、[ディスク]タブにプロセスごとのI/O統計を表示します(おそらく、この質問が行われてからの新しいものです)。 enter image description here 「書き込みバイト数」および「読み取りバイト数」列を参照してください。

2
rogerdpack

メニューバーにある iStat Menus を見つけました。上位5つのディスク読み取り/書き込みユーザーのみが表示されます(合計かどうかはわかりませんが、並べ替えられません)。

0