OS X'te neden bu kadar gülünç yavaş?


36

Mac'imdeki yazılımın (10.8.2, MacBook Pro) neden bu kadar yavaş olduğunu çözemiyorum.

Mac'imde lsofbir dakikadan fazla sürüyor:

$ touch /tmp/testfile
$ time lsof /tmp/testfile

real   1m16.483s
user   0m0.029s
sys    1m15.969s

Tipik bir Linux kutusunda, Ubuntu 12.04'ü çalıştırmak lsof20 ms sürer:

$ touch /tmp/testfile
$ time lsof /tmp/testfile

real   0m0.023s
user   0m0.008s
sys    0m0.012s

Çalıştırırsam sorun devam eder lsof -n(DNS aramalarını önlemek için). Ayrıca, ben sistem çağrıları yapılır denetimi çalıştı lsofkullanarak dtrussve onu aramasını olduğunu tespit proc_infoonlarca, binlerce kere:

$ 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

Herhangi bir fikir? Bu testleri yaptım ve aynı sonuçları hem lsofOS X'in (4.85) içerdiği sürümünü hem de ftp://sunsite.ualberta.ca/pub/Mirror/lsof/ (4.87) adresindeki son sürümü kullanarak elde ettim .

(Meraklı için, bu performanstan dolayı hüsrana uğramamın nedeni, görüntüleri Evernote'a sürüklediğimde lsof, dosya kopyalama sürecinde çalışarak , sistemimi her zaman bir görüntü eklemeye çalıştığımda tam bir dakika beklememize neden olmasıdır. Evernote'ta.)


1
Bir dosya yerine konsola çıkardıysanız, belirli bir noktada mı duruyor? Ayrıca 10.8.2'deyim. Benim için 6 saniye sürdü ve her seferinde AirServer'ın açık dosyalarını listeleyerek asıldığını fark ettim. AirServer'ı öldürdüm ve zaman 1.76'ya düştü. Belki de sisteminizde değerlendirilmesi uzun zaman alan bir şey var?
Warren Pena

İlginç veri noktası, @WarrenPena. lsofArgüman olmadan çalışırsam (tüm dosyaları listelemek için), bir dakika bekler ve sonra tüm dosyaları yazdırır. Ancak, bahsettiğim gibi, / tmp dizininde açık bir tek dosya olanları listelemeye çalışırsam hala askıda kalıyor, bu yüzden sorun olan belirli bir açık dosya değil. Ayrıca, herhangi bir AirServer işlemi gerçekleştirmiyorum.
Jason,

2
(Sadece?) Benim için bir saniye sürer. Ayrıca deneyebilirsin sudo opensnoop -n lsof.
Lri

2
Benim için 19 saniye sürer. Neden hiçbir fikrim ...
daviewales 14

İyi fikir, @LauriRanta. Koşmayı denedim sudo opensnoop -n lsofve lsof /tmp/testfileiki sekmelerde ve sadece üç dosya açılmış verildiği bildirildi opensnoop. Bu nedenle, sorun aşırı sayıda dosya açılmamalıdır, aşırı proc_infoçağrılarla ilgili bir şey olmalıdır .
Jason,

Yanıtlar:


10

Tecrübelerime göre, Mac OS X 10.7 (Lion) 'den 10.11.5 (EI Capitan)' a kadar lsofher zaman asmak.

Sorunu çözmek için -nseçeneği ekleyin .

lsof -n

El kitabına göre lsof, -nseçenek:

inhibits the conversion of network numbers to host names for network files.  
Inhibiting conversion may make  lsof  run faster.  It is also useful when host 
name lookup is not working properly

EDIT 2018-04-25: Hala yavaşsa, deneyebilirsiniz

-O to bypass  the  strategy it uses to avoid being blocked by some kernel operations
-P to inhibits the conversion of port numbers to port names for network files
-l to inhibits  the  conversion of user ID numbers to login names

Neden bu kadar yavaş olduğunu bulmanın nihai yolu, "Aletler" aracını (sağ üst köşeden Spotlight Arama simgesinden) çalıştırmak için / usr / sbin / lsof üzerinde "Sistem İzlemesi" yapmak ve ardından grafikleri ve sys çağrılarını görmektir.

görüntü tanımını buraya girin görüntü tanımını buraya girin görüntü tanımını buraya girin görüntü tanımını buraya girin görüntü tanımını buraya girin


2
Vaov! Eklenmesi -nbenim kesmek lsof +Dgelen aşağı 5.31 realiçin 0.25 real. Bu seçenek ... gerçek
wetjosh

2
Hala gülünç yavaş yavaş benim için ...
Noldorin

Merhaba @Noldorin, bu eski konu ile aynı os üzerinde misiniz? Değilse, buraya özel kurulumunuzla ve belirli zamanlamanızla ilişkilendiren yeni bir soru, yeni bir cevap verebilir.
bmike

3

Sorunun en büyük kısmının, macOS'un boşa harcanan çerçevelerin katmanları üzerinde şişkinlik ve gereksiz katmanlar ile daha da saçma hale gelmesi olduğunu düşünüyorum. Bu, yüzlerce ek işlem ve binlerce ek dosyanın açık tutulması anlamına geliyordu, iş miktarının lsofen az bir büyüklük sırasına göre yapılması ve belki de daha fazla iki sıraya göre yapılması gerekiyordu.

lsof makul hızdan 10.6 ile 10.13 arasında şiddetli bir şekilde yavaşladı.

İşte şu an 10.13.4 olan bir sistemde aşağıdakileri açık ve çalışan sadece 7 uygulama ile görüyorum (Terminal, Chrome, Takvim, Bulucu, Adium, IPGadget ve Stickies). (Chrome'da her biri 10 sekme bulunan 7 pencere vardır.)

# ps ax | wc -l
     401
# time lsof -lnP | wc -l
   10976

real    0m49.684s
user    0m0.250s
sys 0m40.172s

Çalışma sırasında her iki CPU da% 50'den fazla sistem süresine sahiptir

-OBazen ekleme yapmak , özellikle de lsofson zamanlarda çalıştırılmadıysa, ancak gördüğüm en iyisi% 10 tasarruf oldu. Genellikle küçüktür ve büyük olasılıkla manuel sayfada belirtilen risklere değmez:

# time lsof -lnPO | wc -l
   10994

real    0m47.482s
user    0m0.249s
sys 0m40.472s

dtrussproc_info()şu anki işlem yükümle 89.000'den fazla çağrı yapıldığını ve çekirdeğin içinde olduklarını iddia ediyor ve timeraporlar olarak, harcanan zamanın büyük çoğunluğu çekirdeğin içinde. Açık dosya başına neden yaklaşık 8 çağrı olduğunu bilmiyorum.

Ne yazık ki macOS / Darwin, hiç bu kadar kullanışlı ve verimli BSD fstatkomutunu içermiyor .


1

Sisteminizin neden en yavaş Mac'imden proc_info30 bin kez aramam için bir dakikadan daha uzun sürdüğünü gösteren bir cevabım yok , ancak zamanlamanız hem linux hem de OS X'in kullanıcı süresini çalıştırmak için 10 ms aralığında olduğunu gösteriyor. İşlemcinizdeki diğer yükleri dışlamak için bu yavaş süreyi Güvenli Modda yeniden oluşturabilir misiniz?

Üç Mac denedim ve 10.7.5 çalıştıranlar, 10.8.2 Mac'imden yaklaşık bir saniye daha hızlılar. Eski işletim sistemi Core 2 Duo işlemcileri daha yavaş ve yeni işletim sistemi çalıştıran bir i7 Mac'in eski işletim sistemi ve CPU'dan daha hızlı veya daha hızlı olacağını düşünüyorum, ancak hatalı olurdum.

Tüm makineler aynı sayıda proc_info çağrısı yapar ve tüm makineler komut için daha az kullanıcı zamanına sahiptir - ancak daha genel bir zamanlamaya daha açık olabilirsiniz (ve sizinkilerin sizin Mountain Lion'ımdan neden çok daha yavaş olduğu konusunda hiçbir fikrim yok) Mac).

11 inç hava (i7) 2011 çalışan dağ aslanı - ssd:

$ system_profiler SPSoftwareDataType
      System Version: OS X 10.8.2 (or something)
      Kernel Version: Darwin 12.3.0
      Secure Virtual Memory: Enabled
$ time lsof /tmp/testfile 

real    0m1.179s
user    0m0.012s
sys     0m1.158s
$ sudo dtruss lsof /tmp/testfile 2> /tmp/dump
$ cat /tmp/dump | sort | uniq -c | sort -nr | head
9310 proc_info(0x2, 0x68, 0x8)           = 1272 0
1220 proc_info(0x2, 0xCEB6, 0x8)                 = 1272 0
$ cat /tmp/dump | cut -c -9 | sort | uniq -c | sort -nr | head
30884 proc_info
 116 write(0x4
  87 read(0x5,
  60 sigaction
  60 setitimer
  35 stat64("/
  30 sigprocma
  30 sigaltsta
  21 close(0x3
  18 close(0x6 

Lion Server çalıştıran 15 inç MacBook Pro - HDD:

$ system_profiler SPSoftwareDataType
      System Version: Mac OS X Server 10.7.5 (11G63)
      Kernel Version: Darwin 11.4.2
$ time lsof /tmp/testfile

real    0m0.329s
user    0m0.005s
sys     0m0.324s

27 inç iMac çalışan Aslan - HDD:

$ system_profiler SPSoftwareDataType
      System Version: Mac OS X 10.7.5 (11G63b)
      Kernel Version: Darwin 11.4.2
$ time lsof /tmp/testfile

real    0m0.066s
user    0m0.002s
sys     0m0.065s
$ sudo dtruss lsof /tmp/testfile 2> /tmp/dump
$ cat /tmp/dump | cut -c -9 | sort | uniq -c | sort -nr | head
23034 proc_info
 188 write(0x4
 141 read(0x5,
  96 sigaction
  96 setitimer
  48 sigprocma
  48 sigaltsta
  31 stat64("/
  21 close(0x3
  18 close(0x6

1
+1. 2010'un sonlarındaki MBP'de (i7 + 8GB) 10.8.2 kullanıyorum ve bir çok uygulamayı çalıştırırken ~ 1.8s alıyorum.
Harv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.