Nie mogę zrozumieć, dlaczego lsof na moim Macu (10.8.2, MacBook Pro) jest taki wolny.
Na moim komputerze Mac lsofzajmuje więcej niż minutę:
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 1m16.483s
user 0m0.029s
sys 1m15.969s
W typowym systemie Linux z systemem Ubuntu 12.04 lsoftrwa 20 ms:
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 0m0.023s
user 0m0.008s
sys 0m0.012s
Problem nie ustępuje, jeśli uruchomię lsof -n(aby uniknąć wyszukiwania DNS). Ponadto próbowałem sprawdzić, które wywołania systemowe są wykonywane przy lsofużyciu dtruss, i stwierdziłem, że wywołuje to proc_infodziesiątki tysięcy razy:
$ 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
Jakieś pomysły? Uruchomiłem te testy i uzyskałem te same wyniki przy użyciu zarówno wersji lsofdołączonej do OS X (4.85), jak i najnowszej wersji z ftp://sunsite.ualberta.ca/pub/Mirror/lsof/ (4.87).
(Z ciekawości powodem, dla którego frustruje mnie ta wydajność, jest to, że kiedy przeciągam obrazy do Evernote, działa ono lsofw trakcie kopiowania pliku, powodując zawieszenie się systemu przez całą minutę za każdym razem, gdy próbuję wstawić obraz w Evernote.)
lsofbez argumentów (aby wyświetlić wszystkie pliki), to zawiesi się na minutę, a następnie wydrukuje wszystkie pliki. Ale, jak wspomniałem, nadal się zawiesza, jeśli spróbuję wymienić, kto ma otwarty pojedynczy plik w katalogu / tmp, więc problem nie jest konkretnym otwartym plikiem. Ponadto nie uruchamiam żadnego procesu AirServer.
sudo opensnoop -n lsof.
sudo opensnoop -n lsofi lsof /tmp/testfilena dwóch kartach, i opensnoop zgłosił tylko, że trzy pliki zostały otwarte. Problemem nie może być zbyt duża liczba otwieranych plików, ale coś związanego z nadmierną liczbą proc_infowywołań.




