Je n'arrive pas à comprendre pourquoi lsof sur mon Mac (10.8.2, MacBook Pro) est si lent.
Sur mon Mac, cela lsofprend plus d'une minute:
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 1m16.483s
user 0m0.029s
sys 1m15.969s
Sur une boîte Linux typique, exécutant Ubuntu 12.04, lsofprend 20 ms:
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 0m0.023s
user 0m0.008s
sys 0m0.012s
Le problème persiste si je lance lsof -n(pour éviter les recherches DNS). De plus, j'ai essayé de vérifier quels appels système sont effectués à l' lsofaide de dtruss, et j'ai constaté qu'il appelait des proc_infodizaines de milliers de fois:
$ 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
Des idées? J'ai exécuté ces tests et obtenu les mêmes résultats en utilisant à la fois la version lsofincluse avec OS X (4.85) ainsi que la dernière version de ftp://sunsite.ualberta.ca/pub/Mirror/lsof/ ( 4.87 ).
(Pour les curieux, la raison pour laquelle je suis frustré par ces performances est que lorsque je fais glisser des images vers Evernote, il s'exécute lsofen cours de copie du fichier, ce qui fait que mon système se bloque pendant une minute complète chaque fois que j'essaie d'insérer une image dans Evernote.)
lsofsans argument (pour répertorier tous les fichiers), il se bloque pendant une minute puis imprime tous les fichiers. Mais, comme je l'ai mentionné, il se bloque toujours si j'essaie de répertorier qui a un seul fichier ouvert dans le répertoire / tmp, donc ce n'est pas un fichier ouvert particulier qui est le problème. De plus, je n'exécute aucun processus AirServer.
sudo opensnoop -n lsof.
sudo opensnoop -n lsofet lsof /tmp/testfiledans deux onglets, et opensnoop a seulement signalé que trois fichiers avaient été ouverts. Donc, le problème ne doit pas être un nombre excessif de fichiers ouverts, mais quelque chose lié à des proc_infoappels excessifs .




