Saya tidak tahu mengapa lsof di Mac saya (10.8.2, MacBook Pro) sangat lambat.
Di Mac saya, lsof
dibutuhkan lebih dari satu menit:
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 1m16.483s
user 0m0.029s
sys 1m15.969s
Pada kotak Linux yang khas, menjalankan Ubuntu 12.04, lsof
membutuhkan waktu 20 ms:
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 0m0.023s
user 0m0.008s
sys 0m0.012s
Masalahnya tetap ada jika saya menjalankan lsof -n
(untuk menghindari pencarian DNS). Selanjutnya, saya mencoba memeriksa panggilan sistem mana yang dibuat dengan lsof
menggunakan dtruss
, dan menemukan bahwa itu memanggil proc_info
puluhan ribu kali:
$ 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
Ada ide? Saya sudah menjalankan tes ini dan mendapatkan hasil yang sama menggunakan versi yang lsof
disertakan dengan OS X (4.85) serta versi terbaru dari ftp://sunsite.ualberta.ca/pub/Mirror/lsof/ (4,87).
(Untuk yang penasaran, alasan saya frustrasi dengan kinerja ini adalah ketika saya menyeret gambar ke Evernote, itu berjalan lsof
dalam proses menyalin file, menyebabkan sistem saya hang selama satu menit penuh setiap kali saya mencoba untuk memasukkan gambar di Evernote.)
lsof
tanpa argumen (untuk daftar semua file), hang selama satu menit dan kemudian mencetak semua file. Tetapi, seperti yang saya sebutkan, itu masih hang jika saya mencoba daftar siapa yang memiliki satu file terbuka di direktori / tmp, jadi itu bukan file terbuka tertentu yang menjadi masalah. Juga, saya tidak menjalankan proses AirServer.
sudo opensnoop -n lsof
.
sudo opensnoop -n lsof
dan lsof /tmp/testfile
dalam dua tab, dan opensnoop hanya melaporkan bahwa tiga file telah dibuka. Jadi masalahnya bukan jumlah file berlebihan yang dibuka, tetapi sesuatu yang terkait dengan proc_info
panggilan berlebihan .