ฉันหาสาเหตุไม่ได้บน Mac ของฉัน (10.8.2, MacBook Pro) ช้ามาก
ใน Mac ของฉันlsof
ใช้เวลามากกว่าหนึ่งนาที:
$ touch /tmp/testfile
$ time lsof /tmp/testfile
real 1m16.483s
user 0m0.029s
sys 1m15.969s
บนกล่อง Linux ทั่วไปที่ใช้งาน Ubuntu 12.04 lsof
จะใช้เวลา 20 ms:
$ 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
ในกระบวนการคัดลอกไฟล์ทำให้ระบบของฉันหยุดทำงานเต็มนาทีทุกครั้งที่ฉันพยายามแทรกภาพ ใน Evernote)
lsof
โดยไม่มีข้อโต้แย้ง (เพื่อแสดงรายการไฟล์ทั้งหมด) มันจะหยุดทำงานหนึ่งนาทีแล้วพิมพ์ไฟล์ทั้งหมด แต่อย่างที่ฉันบอกไปมันยังคงแฮงค์ถ้าฉันพยายามที่จะแสดงรายการผู้ที่มีไฟล์เดียวเปิดในไดเรกทอรี / tmp ดังนั้นจึงไม่ใช่ไฟล์เปิดเฉพาะที่เป็นปัญหา นอกจากนี้ฉันไม่ได้ใช้กระบวนการ AirServer ใด ๆ
sudo opensnoop -n lsof
นอกจากนี้คุณยังสามารถลอง
sudo opensnoop -n lsof
และlsof /tmp/testfile
ในสองแท็บและ opensnoop รายงานเพียงว่ามีสามไฟล์ที่ถูกเปิด ดังนั้นปัญหาต้องไม่เปิดเกินจำนวนไฟล์ แต่สิ่งที่เกี่ยวข้องกับการproc_info
โทรมากเกินไป