dtracemac

MacのdtraceでディスクI/Oの多いプロセスを特定する

dtraceは、Solaris10で開発された仕組みですが、Mac OS Xにも移植されています。
アプリケーション側の設定不要で動的にシステム情報を取得することができます。

提供されているプローブ

プローブと呼ばれるシステム情報を収集するポイントがあります。
OS X 10.8.2では、183,198個のプローブが提供されています。

$ sudo dtrace -l > dtracelist.txt
$ wc -l dtracelist.txt
184198 dtracelist.txt
$ 

フィアルI/Oの多いプロセスを特定

ファイルの読み書きは、以下のプローブで情報が提供されます。

$ grep syscall dtracelist.txt | egrep " read return| write return"
138    syscall                                                read return
140    syscall                                               write return
$ 

fileio.dというファイルにDスクリプトというawkライクなスクリプトを書いて、read/writeそれぞれのプローブで読み書きしているデータのサイズを表示します。

$ cat fileio.d
#!/usr/sbin/dtrace -s
syscall::read:return
/arg0 > 0/ {
@readbytes[execname] = sum(arg0);
}
syscall::write:return
/arg0 > 0/ {
@writebytes[execname] = sum(arg0);
}
dtrace:::END {
printf("\n=== read ===");
printa(@readbytes);
printf("=== write ===");
printa(@writebytes);
}
$ sudo ./fileio.d
dtrace: script './fileio.d' matched 3 probes
^C
CPU     ID                    FUNCTION:NAME
0      2                             :END
=== read ===
launchd                                                           4
Terminal                                                          5
configd                                                         164
fseventsd                                                    158289
mds                                                          158289
mdworker                                                   13284433
=== write ===
Terminal                                                          2
launchd                                                           4
syslogd                                                         110
configd                                                         128
$ 

mdworkerというプロセスが大量にデータを読んでいますがSpotlightのインデックスを作成しているプロセスのようです。

タイトルとURLをコピーしました