Ich kann nicht herausfinden, warum lsof auf meinem Mac (10.8.2, MacBook Pro) so langsam ist.
Auf meinem Mac lsof
dauert es länger als eine Minute:
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 1m16.483s
user 0m0.029s
sys 1m15.969s
Auf einer typischen Linux-Box, auf der Ubuntu 12.04 ausgeführt wird, lsof
dauert es 20 ms:
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 0m0.023s
user 0m0.008s
sys 0m0.012s
Das Problem besteht weiterhin, wenn ich ausgeführt werde lsof -n
(um DNS-Lookups zu vermeiden). Außerdem habe ich versucht zu überprüfen, welche Systemaufrufe lsof
mithilfe von ausgeführt werden dtruss
, und festgestellt, dass es proc_info
zehntausende Male aufruft :
$ 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
Irgendwelche Ideen? Ich habe diese Tests durchgeführt und die gleichen Ergebnisse sowohl lsof
mit der in OS X enthaltenen Version ( 4.85 ) als auch mit der neuesten Version von ftp://sunsite.ualberta.ca/pub/Mirror/lsof/ ( 4.87 ) erzielt .
(Für die Neugierigen ist der Grund, warum ich von dieser Leistung frustriert bin, der, dass wenn ich Bilder auf Evernote ziehe, diese lsof
beim Kopieren der Datei ausgeführt werden und mein System jedes Mal, wenn ich versuche, ein Bild einzufügen, für eine volle Minute hängen bleibt in Evernote.)
lsof
ohne Argumente ausführe (um alle Dateien aufzulisten), bleibt es eine Minute lang hängen und druckt dann alle Dateien. Aber, wie ich bereits erwähnt habe, hängt es immer noch, wenn ich versuche, aufzulisten, wer eine einzelne Datei im Verzeichnis / tmp geöffnet hat. Es handelt sich also nicht um eine bestimmte geöffnete Datei, die das Problem darstellt. Außerdem führe ich keinen AirServer-Prozess aus.
sudo opensnoop -n lsof
.
sudo opensnoop -n lsof
und lsof /tmp/testfile
in zwei Registerkarten auszuführen, und opensnoop hat nur gemeldet, dass drei Dateien geöffnet wurden. Das Problem darf also nicht darin bestehen, dass zu viele Dateien geöffnet werden, sondern in Bezug auf zu viele proc_info
Aufrufe.