OS X neden çok fazla "etkin olmayan bellek" varken takas kullanıyor?


22

Birkaç aydır OS X kullanıyorum (Lion ve şimdi Mountain Lion). Mini'mde 8 GB var ve neredeyse her gün buna yaklaşıyor. 8 GB'lık Windows 7 makinesinde hiçbir zaman böyle bir sorun yaşamadım. Her neyse, net üzerinden okudum, aktif olmayan hafızanın yakın zamanda kapatılmış olan programların uygulama önbelleği olduğunu ve daha hızlı yeniden açılma için kullanılabildiğini ve bu etkin olmayan hafıza gerektiğinde yeni bir uygulamaya bırakılabileceğini okudum. Serbest bırakılmadı. Bunun yerine OS X değiş tokuş etmeye başlar. Öyleyse sorum, neden OS X'in "etkin olmayan bellek" olduğu zaman takas kullanıyor? Ne demek istediğimi gösteren bir ekran:

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

Gerçekten, OS X'i değiştirmeye başlamadan önce bu 2,69 GB'ı kullanabilmek için kullanabileceğim bir yer olduğunu umuyorum.


Evet bu garip. Tüm RAM'i alan tek bir uygulama mı? Belki OSX, uygulamaları bir kerede% 80'den fazla RAM kullanmama konusunda sınırlandırır. Aktif değil, özgür olduğu anlamına gelmez. Bir şey için ayrılmıştır.
Piotr Kula

Hayır - pek çok uygulama, Tarayıcı, Tutulma vb. Okuduklarımdan beri son zamanlarda kapalı olan uygulamaların önbelleği olduğu için ücretsiz. OS X'in etkin olmayan bellek varken takas yapmamasını sağlamanın yolu olmalı
Balchev

İstediğim zaman yeniden üretebilirim ve gerekirse etkinlik izleyicinin bir ekranını yapabilirim
Balchev

2
Etkin olmayan hafıza boş hafıza değil.
kinokijuf

2
@kinokijuf, ancak boş hafıza kalmadığında boş hafıza görevi görmelidir. Etkin olmayan hafıza her zaman yine de diske değiştirilirse, etkin - etkin olmayan ayrım yapmanın gerçek bir anlamı yoktur.
Pieter

Yanıtlar:


18

Değişim görünüşte, aktif olmayan RAM sayfaları gerçekten aktifken meydana geldi.

( Güncelleme: Bir yorumda açıklandığı gibi, bu sizin durumunuz değil. Bu nedenle aynı sorunu olan insanlar yatay kurala ilerleyebilir .)

Yani çalışan birçok program vardı ve çekirdek bazı sayfaları değiştirdi. Sonra bazı programları bıraktın. Çekirdek RAM sayfalarını etkin değil olarak işaretler. Ancak, bu sayfalar gerekli olana kadar sayfalara RAM'e geçilmez. Bu, hem etkin olmayan hem de değiştirilmiş sayfalara sahip olmasına neden olur.

Neden sayfaların önüne geçilmiyor? Çünkü bu oranlara karşı bahis olacak: uzun vadede kaybedersiniz. Basitleştirilmiş bir örnek düşünelim: Aynı anda RAM'e uymayan iki program A ve B. A programı hala çalışıyor ve değiştirilen tüm sayfalar A'ya ait. B programı iptal edildi ve etkin olmayan tüm sayfalar B'ye ait.

Eğer çekirdek önleyici olarak A'nın sayfalarını değiştirirse ve hemen sonra:

  • Bir sayfalara erişmesi gerekiyor -> Sen kazandın - sayfalar zaten RAM’de.
  • B'yi tekrar başlattıysanız -> Kaybedersiniz - sayfaları RAM'e getirme ücretini "ödediniz" ve şimdi geri göndermeniz gerekiyor.
  • başka bir program başlattığınızda C -> A ve C aynı anda RAM’e sığmazsa kaybedersiniz. Uygunlarsa, sen bile.

Ayrıca, değiştirmenin (diske yazma) değiştirmenin (diskten okuma) daha pahalı olduğunu dikkate alın. Bu da “bahis” i daha çekici hale getiriyor.

Kısacası: çekirdeğinize güvenin ve zekâsı atmaya çalışmayın.


Güncelleme: Etkin olmayan belleğin, Sistem Belleğini okumak için Etkinlik İzleyiciyi Kullanma makalesinin işe yarayacağına inanmasına neden olduğu için çalışmadığını belirtir . Etkin olmayan bellek için makalede verilen tanım doğrudur:

Bu bilgi RAM'dedir ancak aktif olarak kullanılmamaktadır, son zamanlarda kullanılmıştır.

Ancak, aşağıdaki örnek tamamen yanıltıcı ve aşırı basitleştirilmiştir (açık sözlü örneğim gibi):

Örneğin, Mail kullanıyorsanız ve sonra bıraktıysanız, Mail'in kullandığı RAM, Etkin olmayan bellek olarak işaretlenir. Etkin olmayan hafıza, sadece Boş hafıza gibi, başka bir uygulama tarafından kullanılabilir. Bununla birlikte, Posta'yı Etkin olmayan hafızası farklı bir uygulama tarafından kullanılmadan önce açarsanız, Posta, Etkin olmayan hafızasını yavaş sürücüden yüklemek yerine Etkin belleğe dönüştürüldüğü için daha hızlı açılır.

Daha fazla çevrimiçi kaynak aradım ve bu konuyu oldukça bilgilendirici olan darwin çekirdek posta listesinde bıraktım . Jim Magee'den alıntı (darwin ekibinden - sanırım):

Kısacası, çekirdek baskı sistemi bellek baskısı ile uğraşırken kullanımdaki sayfaları tarar ve bunları aktif ve aktif olmayan işaretler arasında dengede tutar. Etkin olmayan sayfalar, etkin değil olarak işaretlenirken yeniden kullanılmak üzere taranır. Yeniden kullanılmışlarsa, aktif olarak işaretlenirler ve başka bir sayfa etkin kullanımda olup olmadığını tespit etmek için etkin durumdan etkin duruma geçmelidir. Yani, aktif olmayan bir yanıltıcıdır. "Muhtemelen pasif, bunu doğrulamaya çalışalım."

Sizin keşfettiğiniz gibi, (şu anda) uğraştığımız iç denge yaklaşık 2/3 aktif vs 1/3 aktif değil ...

Bu gözlemlediğiniz davranışı açıklar. Gördüğünüz etkin olmayan sayfalar, yakın zamanda kullanılmamış çalışan programlara aittir. Bu nedenle, yeni bir programı başlattığınızda etkin olmayan sayfalar değiştirilir. Aynı zamanda, diğer programlardan gelen sayfalar, aktiflere karşı aktif olmayanların 2/1 oranını korumak için pasif olarak işaretlenir.

Bu konu aynı zamanda darwin internals hakkında daha fazla bilgi edinmek için bazı önerilerde bulunuyor. Ayrıca beachball sorunları nedeniyle (genellikle bununla çok az ilgisi vardır) bellek kullanımını araştırmaya başlamanız durumunda bazı önerilerde bulunabilirsiniz.

Sonuç aynı kalıyor: Çekirdeğinize güvenin ve zekâyı denemeyin. :-)


1
Merhaba, Beni anladığınızdan emin değilim - 100-200 MB boş hafıza, 2,6 GB "etkin değil" ve başka bir program başlattığınızdan, eclipse, xcode vb. Diyelim. 2.6 GB yerine aktif hafızadan değiştirin. Ne demek istediğimi anlarsanız emin değilim. Her neyse, cevabınız için teşekkürler
Balchev

Bu şimdi açık. Belki bu yorumdaki örneği sorunuza eklemelisiniz. Gözlemledikleriniz için yeterli bir açıklama sağladığını düşündüğüm ek bilgiler ekledim.
m000

Orijinal cevabımı düzeltip düzeltmeyeceğimden emin değilim. Farklı bir durumu açıklıyor (sorunuzu yorumunuzdan hemen önce almadım) ve insanları şaşırtabilir.
m000

Radoo'nun dediği gibi - “OS X aç bir canavar”. OS X'in bu kadar hafızada aç olmasını beklemiyordum (hem Lion hem de Mountain Mountain) ve bu yüzden burada balık gibi bir şey olduğunu düşünmüştüm.
Balchev

6

Yeterli koçunuz varsa, disk belleği güvenli bir şekilde devre dışı bırakabilirsiniz.

Bu komutları dene.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

Ardından yeniden başlatın ve dynamic_pager işleminin artık çalışmadığını doğrulayın.

İçinde hiçbir takas dosyası oluşturulmadığından emin olun /private/var/vm/.

Etkinleştirmek için aşağıdaki komutları deneyin:

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Spotlight'ı daha fazla ram açmak ve disk etkinliğini azaltmak için de devre dışı bırakabilirsiniz. Spotlight'ı devre dışı bırakmak ve etkinleştirmek için aşağıdaki komutlar kullanılır.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

Net üzerinden, OSX’in takas etmenin devre dışı bırakılmasının sistemin beklenmedik davranışlarına ve çökmelere yol açabileceğini okudum. Bu doğru mu?
Balchev

Hafızanız az olduğunda. Ancak, 8 Gb gibi, yeterli belleğiniz varsa, herhangi bir soruna neden olmaz.
arundevma

2
“8 Gb gibi yeterli hafıza” - üzgünüm, çok tatlı… :)
Bombe

0

Yapabileceğin bir şey yok. Bunu neden yapıyor? Çünkü bu sadece OS X'in çalışma şekli. İlginç olanı, Mac'in aldığı her uykuda dolu hafızanın nasıl büyüdüğü.

Ne yapabilirsin:

  1. RAM yükseltin.
  2. Etkin olmayan belleğin çoğunu gerektiğinde silmek için kutsal " temizleme " komutunu çalıştırın .
  3. Değişimi devre dışı bırakın http://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

Merhaba, temizleme komutunu kullandım, ancak çoğu zaman "etkin olmayan" belleğin yarısından daha azını boşalttı. OSX'te devre dışı bırakmanın takas edilmesinin sistemin beklenmedik davranışlarına yol açabileceğini ve çökmelere neden olduğunu okudum. Yani 1) Cevabınız
Balchev

Macbook pro'mda 16GB var, bu bir sunucu değil. :) OS X'in özellikle birden fazla orta / büyük uygulama aynı anda kullanıldığında, hafızaya gelince aç bir canavar olduğu bilinmektedir. Tüm bu 16GB'ları herhangi bir görüntü / video düzenleme yazılımı, sadece bazı oyunlar ve küçük uygulamalar açmadan doldurmayı başardım. Aktif olmayan hafıza yaklaşık

Ayrıca birçok OS X uygulamasının zaten 64bit olduğunu göz önünde bulundurmalısınız. 64bit uygulamalar adres boşluğunun artması nedeniyle 32bit uygulamalardan daha fazla bellek ayırmaktadır.

0

Sistem tasarlandığı gibi çalışıyor. Bellek baskısı olmasa bile, atılamayan ancak son zamanlarda sistem meşgul olmadığında takas edilmemiş bazı sayfaları yazmak mantıklı gelebilir. Bu şekilde, daha sonra hafıza baskısı varsa, bu sayfalar önce sistem meşgulken bunları takas etmek için yazmak zorunda kalmadan RAM'den çıkarılabilir.


1
o zaman kötü tasarlanmış. takas alanını tahsis etmek ve kullanmak çok agresif.
mendota

Neden fark eder? Çok fazla serbest takas varsa, takas alanı tahsis etmek zararsızdır. Bu özellikle, takas işleminin gerekli verileri içermediği durumlarda geçerlidir, çünkü tahsislerin kaldırılmasının maliyeti yoktur. Bu iyi bir tasarım - sistem baskı altındayken ertelemek yerine neredeyse masrafsız olduğunda çok çalışmak.
David Schwartz

2
Çok agresif olduğu ve programlarda kekemelik veya takılmalara neden olduğu kötü bir tasarımdır, yanlışlıkla etkin değil olarak işaretler ve takas işlemine başlar. bu arada RAM'de sekiz konser daha var: /
mendota

Mendota ile aynı fikirdeyim. Takas işlemini tamamen devre dışı bıraktığımda, sistemim kekemelik olmadan sorunsuz çalışıyor.
Anton Kuzmin

@AntonKuzmin Bu sorunun ne hakkında olduğu ile gerçekten alakası yok. Bu soruyu okursanız, kekemelik veya herhangi bir sorun hakkında hiçbir şey söylemez.
David Schwartz
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.