Mac(10.8.2、MacBook Pro)のlsofがなぜ遅いのか、私にはわかりません。
私のMacではlsof
、1分以上かかります。
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 1m16.483s
user 0m0.029s
sys 1m15.969s
Ubuntu 12.04を実行している典型的なLinuxボックスでは、lsof
20ミリ秒かかります。
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 0m0.023s
user 0m0.008s
sys 0m0.012s
lsof -n
(DNSルックアップを回避するために)実行しても問題は解決しません。さらに、私は、システムコールがで作られているチェックしてみましたlsof
使用してdtruss
、それが呼び出しだことがわかっproc_info
数万回を:
$ sudo dtruss lsof /tmp/testfile 2> /tmp/dump
$ cat /tmp/dump | sort | uniq -c | sort -nr | head
10000 proc_info(0x2, 0x1199, 0x8) = 1272 0
6876 proc_info(0x2, 0x45, 0x8) = 1272 0
2360 proc_info(0x2, 0x190D, 0x8) = 1272 0
1294 proc_info(0x2, 0xFF, 0x8) = 1272 0
1152 proc_info(0x2, 0x474, 0x8) = 1272 0
1079 proc_info(0x2, 0x2F, 0x8) = 1272 0
709 proc_info(0x2, 0xFE, 0x8) = 1272 0
693 proc_info(0x2, 0x1F, 0x8) = 1272 0
623 proc_info(0x2, 0x11A, 0x8) = 1272 0
528 proc_info(0x2, 0xF7, 0x8) = 1272 0
何か案は?これらのテストを実行lsof
し、OS X に含まれるバージョン(4.85)とftp://sunsite.ualberta.ca/pub/Mirror/lsof/の最新バージョン(4.87)の両方を使用して同じ結果を得ました。
(奇妙なことに、このパフォーマンスにイライラする理由は、Evernoteに画像をドラッグlsof
すると、ファイルをコピーするプロセスで実行され、画像を挿入しようとするたびにシステムが1分間ハングするためです。 Evernoteで。)
lsof
引数なしで(すべてのファイルをリストするために)実行すると、1分間ハングしてからすべてのファイルを印刷します。しかし、先ほど述べたように、/ tmpディレクトリで単一のファイルを開いている人をリストしようとするとハングします。そのため、特定の開いているファイルが問題ではありません。また、AirServerプロセスを実行していません。
sudo opensnoop -n lsof
ます。
sudo opensnoop -n lsof
しlsof /tmp/testfile
てみましたが、opensnoopは3つのファイルが開かれたとしか報告しませんでした。そのため、問題はファイルを開く回数が多すぎることではなく、過剰なproc_info
呼び出しに関連するものでなければなりません。