Mavericks ve Yosemite'in “bellek baskısı” hangi ölçek ve ölçütlere uyuyor?


57

Mavericks '(ve ayrıca Yosemite) Aktivite Monitörü yeni bir şema, hafıza basıncı gösterir . Ne yazık ki, yardım metni yalnızca tam olarak ne ölçtüğünü açık bir şekilde açıklıyor. Hafıza basıncı nasıl hesaplanır?

Mavericks Etkinlik Monitörü - bellek

Resim sorguları, Mavericks'in en iyi yeni özelliği hakkındaki bir anket sorusundan bu cevaba gidiyor .

Yanıtlar:


51

Hafıza basıncı basit bir hafıza yüzdesi göstergesi değildir ve% 0 ila% 100 grafik gibi görünmektedir. sysctlDeğeri vm.memory_pressurekablolu ve aktif sayfalara özgür ve inaktif hafıza sayfaları arasında oranını izleyen bir bilgisayarlı hedefle ilgili olarak hesaplanır. Mutlak sayıcılar, vm_statsanal belleğin ayrıntılı tahsisini incelemek için komut satırı aracı kullanılarak görüntülenir . Jonathan Levin http://newosxbook.com/articles/MemoryPressure.html adresinde hem macOS hem de iOS sanal belleğini ve basınç endeksinin yüksek olduğu zamanlarda yapılan işlemlerin yanı sıra bellek basıncını nasıl hesapladıklarını da kapsayan mükemmel belgelere sahiptir .

Hesaplamasını besleyen ilgili sanal hafıza (vm) vm.memory_pressure:

  • vm.page_free_count - mutlak ücretsiz sayfa sayısı
  • vm.vm_page_free_target - "baskısız" bir durum için hesaplanmış bir hedef veya hedef
  • vm.page_free_wanted - vm sisteminin mevcut hesaplanan basınç endeksini hafifletmek için serbest bırakmak istediği şey

Öyleyse - Faaliyet izleyiciyle (ya da sysctl değerlerini programlı olarak veya komut satırı kabuğunda kontrol ediyorum) bellek baskınızı izliyorsanız, bu dört değere bakmak için iyi yaparsınız:

sysctl -a vm | egrep "page_free|pressure"

memory_pressureMavericks ile getirilen yeni bir komut var ve bellek alt sistemini bir uyarı durumuna getirmek için çalıştırdığımda - bellek basıncının sarı bir aralıkta arttığını görebilirsiniz.

<code> sudo memory_pressure -l warn </code> etkinlik izleyici sonuçları

Basınç grafiği "uyarı" seviyesi grafikte açıkça bu duruma sürekli artış olarak takım, takımın bellek yaklaşık 4 GB tahsis: sudo memory_pressure -l warn. Gördüğünüz gibi, basınçtan önceki sistemde 5.9 GB kullanılmış ve sonrasında 7.99 GB'a kadar kullanılmış ve bu da takas ve sıkıştırma nedeniyle ilave edilmesi gerekmiyor.

vm_stat 15Uyarı sonucunun ölçülebilir bir disk belleği olmadan nasıl gösterildiğini izledikten sonra , aletten (Control-C) çıktım ve daha sonra bellek basıncını kritik hale getirmek için aleti tekrar çalıştırdım:sudo memory_pressure -l critical

Disk belleği için diskte disk belleği olan 5 GB RAM bulunduğunu belirten bir kaç dakikadan daha uzun bir süre çalışmamasına izin vermedim, diskimi doldurmak ve araçtan çıkmak istemedim.

<code> sudo memory_pressure -l kritik </code> etkinlik izleyici sonuçları

Uyarı sona erdikten sonra sistemin RAM'i ne kadar hızlı serbest bıraktığını ve ayrıca sanal bellek sisteminin diske takılmasını önlemek için yeterli sayfaları sıkıştıramadığını göstermek için "kırmızı" bölgeye nasıl girdiğini görebilirsiniz. Eğitimli tahminim kırmızı baskı olduğunu gösteriyor ki, takas ve dramatik aşırı tahsisat ve / veya sistemin tercih ettiği miktarın altında kalan ve / veya takas için kullanılması beklenen sayfaları takas etmeyi aktif olarak temizleyen boş zamanları gösterir. Benzer şekilde, tahsisler serbest bırakıldıktan ve sanal bellek sisteminden baskı alındıktan sonra sistem hızla iyileşir.


Açıklama için teşekkür ederim. Yukarıdaki ekranda Sanal Bellek, Dosya Önbelleği ve Uygulama Belleği parametrelerini hesaplayan bir komut (veya bir dizi komut) olup olmadığını bilmek istiyorum.
Muhammad Hassan Nasr

@MuhammadHassan Aşağıdaki cevap, algoritmanın güzel bir ters mühendislik özetini içerir xnuve iç kaynaklara açık kaynaklarda nereye bakılacağına işaret eder. GUI basınç göstergesine en uygun olan 4 değeri çıkardım.
bmike

30

Bir şekilde açıklığa kavuşturmak ve bu tahminin daha kesin olmasını sağlamak: bellek basıncı, çekirdek (xnu) tarafından memory_status (önceden Jetsam olarak bilinir) adı verilen özel bir iş parçacığı tarafından kullanılan bir ölçüdür. Bu iş parçacığı, kullanılabilir RAM'in ne zaman düşük olduğunu saptamaktan sorumlu - bu da OS X'te değiş tokuşa neden olabilir ve iOS'ta (takas olmadığından) en yüksek bellek tüketen uygulamayı öldürür. Mavericks'te iki işletim sistemi birbirine daha yakın. Memorystatus, Obj-C çalışma zamanının sonunda bir appDidReceiveLowMemoryWarning'e çevirdiği bir çekirdek notu yayınlar. Uygulamaların kullanılmayan veya harici belleği temizlemesi gerekiyor (örneğin, önbellek). Darwin'in libC'si hafızayı otomatik olarak temizler.

Bir müşterinin baskı olaylarını dinlemesini sağlayan ve kaç tane fiziksel sayfanın geri alınabileceğini görmesini sağlayan, belirli (belgelenmemiş) bir sistem çağrısı, vm_pressure_monitor (# 296, doğru hatırlıyorsam) vardır.

Http://newosxbook.com/index.php?page=downloads adresinden indirilebilir olan OS X için İşlem Gezgini'ni kullanarak Mavericks'teki baskı olaylarını görüntüleyebilirsiniz . Bu hem basınç hem de basınç olaylarını gösterir.


Bu web sitesinde ayrıca ayrıntılı bir makale de var - newosxbook.com/articles/MemoryPressure.html - detaylandırma OS X ve iOS’de bellek basıncı ve kullanımı
user61711

Mavericks ve iOS çekirdeği arasındaki benzerlik ve farklılıklarla ilgili harika detaylar. İşlem Gezgini'ne bağlantı için teşekkür ederiz.
bmike

14

Bellek basıncı iki sayaç tarafından tanımlanır, Mach dahili olarak tutar:

  • vm_page_free_count: Kaç sayfa RAM şu anda ücretsiz
  • vm_page_free_target: En az kaç sayfa RAM, optimal olarak ücretsiz olmalıdır.

Bunları kolayca sysctl kullanarak görebilirsiniz:

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

boş sayfaların miktarı hedef miktarın altına düşerse - baskı durumumuz var.


Gönderen http://newosxbook.com/articles/MemoryPressure.html

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.