Balon OS X kernel_task ve kablolu bellek kullanımı nasıl teşhis edilir?


18

Çok garip bir sorunum var, bu da temel neden için teşhis koymakta zorlanıyorum.

14 GB RAM'e sahip bir Mac Pro (2008, 8 çekirdekli 2.8 GHz, 8800GT) var (bu sorun nedeniyle yakın zamanda yükseltildi!).

Sistemimi açtığımda ve giriş yaptığımda, vm_stat / top / Activity Monitor kernel_task'in yaklaşık 150 MB ayırdığını ve makinede yaklaşık 800 MB Kablolu bellek ayrıldığını gösterecektir.

Başlangıçta bile, 800 MB, çalışan hiçbir uygulama olmadan tahsis edilecek çok fazla kablolu bellek gibi görünüyor - ama daha da kötüleşiyor. (Not: Kablolu kilitli, silinemez bellek)

Çok kısa bir süre sonra, bazen bir terminal başlatmak kadar basit bir şey tarafından tetiklenen kernel_task, 8-900 MB Gerçek Mem'e (RSIZE) balonlanır ve Kablolu Bellek 1.6 GB'a kadar hızlanır (tüm ekstra bellek isteklerinin çekirdekli RAM).

Her şeyi bıraktığımda (IE: çalışan uygulama yok, bir etkinlik izleyicisi veya üst kısmı görüntülemek için terminal çubuğu), kernel_task RSIZE veya Kablolu Bellek kullanımında kayda değer bir azalma olmaz. Bunun tersine gitmek ve sistemi görevlerle yüklemek, kablolu belleğin azaltılmadığını ve daha da önemlisi ağır değiştirme tercihinde azaltılmadığını gösterir.

Oturumu kapatıp tekrar oturum açarsam, biraz azalır (450 MB kernel_task, 1.28 GB Kablolu), ancak başlangıca geri dönmez.

Ben tuhaf bir kext s çalıştırmıyorum - ve dahası, kextstat orada hiçbir büyük bellek ayırmaları gösterir; en büyüğü com.apple.nvidia.nv50hal yaklaşık 4 MB bellek.

Bu gerçekleştiğinde makine genel olarak daha halsiz hissediyor - şaşırtıcı bir şekilde, bu kadar büyük bir RAM miktarı ödenemez olarak işaretlendiğinden.

Birkaç sorum var:

1) Tüm bu kablolu hafızayı neyin ayırdığını teşhis etmenin iyi bir yolu var mı? Genellikle kernel_task boyutunun 2 katından fazladır ve hiçbir uygulama çalıştırmaz. Gerçek bellek toplamı toplanmıyor gibi görünüyor - herhangi bir yerde hesaba katılmayan bir sürü RAM var gibi görünüyor.

2) Çekirdeğin aniden 6 kat daha fazla belleğe neden olmasına ne oluyor?


Yanıtlar:


5

Çekirdeğin neden normalden daha fazla bellek kullandığını araştırmak için farklı araçlar kullanabilirsiniz.

  1. Hangi işlemin en fazla bellek kullandığını kontrol etmek için Etkinlik Monitörü'nü çalıştırın kernel_task;
  2. vm_stat 1Gerçek zamanlı bellek istatistiklerini görmek ve belleğinizin her saniye gerçekten artıp artmadığını görmek için Terminal'de çalıştırın .
  3. fs_usageSistem çağrılarını ve sayfa hatalarını gerçek zamanlı olarak izlemek için (kök olarak) aracı çalıştırın .
  4. Terminal'de çalıştırılan birden çok işlemin kirli / anonim dağıtımlarının toplamını kontrol etmek için:

    sudo footprint -all -categories -swapped -collapseSharing
    

    Ne kadar değiştirildiği (kullanıcı veya çekirdek belleği başına) gibi bellek bilgilerini toplar.

  5. Dahası, çoğu belleği kullanan çekirdek olduğunu düşünüyorsanız, zprintaracı deneyin :

    sudo zprint -t -s | head -n20
    

    Çekirdek bölgeler hakkındaki bilgileri gösterecektir.

Disk önbelleğinin temizlenmesini (biraz bellek boşaltmaya) zorlamak isterseniz, şunları deneyebilirsiniz:

sync && sudo purge

Ayrıca bkz: Yüksek çekirdek görev belleği kullanımı nasıl araştırılır? AD SE şirketinde


3

Çekirdek uzantıları, bilginiz olmadan işletim sistemi tarafından çalıştırılabilen birçok, çok, çok kod parçasından sadece biridir. Bunlardan birkaçını bulmanıza yardımcı olacak Danışman'ın Kanarya adlı küçük bir Python tabanlı yardımcı programım var:

Bu herhangi bir potansiyel suçlu ortaya çıkarmazsa, temiz bir kurulumdan önyükleme diyorum ve sorunu orada yeniden üretip üretemeyeceğinizi görüyorum.

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.