Yeterli miktarda RAM varsa, takas alanına ihtiyacım var mı?


91

Anladığım kadarıyla, Linux’daki bir takas bölümünün amacı RAM’den “sık erişilmeyen” bazı bilgileri serbest bırakmak ve sabit disk sürücünüzdeki belirli bir bölüme taşımaktır (okumasını veya yazmayı yavaşlatmak pahasına) için), esasen aktif uygulamalara "yüksek hızlı hafıza" dan daha fazla izin vermek.

Bu, az miktarda RAM bulunan bir makinedeyken ve bitiyorsa sorunla karşılaşmak istemiyorsanız harikadır. Bununla birlikte, sisteminizde 16 GB veya 32 GB RAM varsa ve StackExchange için MySQL veritabanı çalıştırmadığınızı veya Linux'ta 1080p tam uzunlukta bir filmi düzenleyemediğinizi varsayarsak, bir takas bölümü kullanılmalı mı?


16
@mikeserv Biliyorsunuz, bu iki harfi sadece komedi etkisi için bir cevap olarak kabul etmek isterim.
IQAndreas, 16.05

3
@ Janis - çok pahalı. Ve eğer ses belleği yönetimi uygularsanız, 1GB'lik makinede bile değişiklik yapmadan kolayca yapabilirsiniz. Maliyet performansını düşürün - buna sahip olduğunuzda çekirdek kaçınılmaz olarak kullanır. Yani, bir 1TB'de veya herhangi bir boyutta bir diskte bir takas bölmesi yapmak, çekirdeğe RAM sayfalarını RAM'de tutmak veya tamamen bırakmak yerine, bellek sayfalarını yerleştirme davetidir. 16 gb ile tipik bir kullanıcı her şeyi kullanmaya asla yaklaşmaz - 3 g çalışma süresinden sonra 24 g RAM kullandım ve 2 gb kullandım ve 10 gb/tmp önbelleğe aldım (çünkü bir torrent kullandım ) .
mikeserv

5
@mikeserv, yanılıyorsun korkarım; Görüntülenen disk ölçümlerini sürekli gözlemledim. Boş hafıza olduğu sürece, takas kullanılmamıştır, sadece hafıza doldurulduğunda takas işlemi başlatılmıştır. Bilgisayarınızı nasıl kullandığınıza bağlı olduğunu düşünüyorum; Her akşam kapatılan bir masaüstü sistemi nadiren bellek sorunlarıyla karşılaşırdı, sistemim aylarca çalışıyordu. Evet, performans maliyet takas, ancak RAM alanı kalmadıysa, sisteminiz çalışmaya devam edebilir. Sahip olduğunuz seçenek nedir? Belki de hafıza yönetimi argümanını inceleyebilirsiniz. Linux sistemimi önceden yapılandırıldığı şekilde kullanıyorum.
Janis

40
@mikeserv 15 karakterden kısa bir yorumu nasıl gönderdiniz?
immibis

11
@ immibis orada 12 sıfır genişlikte boşluk var
dave

Yanıtlar:


98

Evet.

Çok zorlayıcı, yasaklayıcı bir sebep olmadıkça (hiç disk yok veya yalnızca ağ diski var) hariç, kesinlikle her zaman takas özelliğini etkinleştirmelisiniz. Sıkça tavsiye edilen saçma boyutların (örneğin, RAM miktarının iki katı) sırasına göre bir takasınız mı olmalı? Hayır , hayır .

Bunun nedeni, takas işleminin yalnızca uygulamalarınız fiziksel RAM'den daha fazla bellek kullanması durumunda yararlı olmamasıdır (aslında, bu durumda takas performansı hiç de ciddi bir şekilde etkilediğinden dolayı hiç de faydalı değildir ). Takas için ana teşvik günümüzde olduğu değil sihirli 32 GiB içine RAM 16GiB açmak için, ama yüklü, mevcut RAM daha verimli kullanılmasını sağlamak için.

Modern bir bilgisayarda, RAM kullanılmaz. Kullanılmayan RAM, bunun yerine parayı satın alıp tasarruf etmeyeceğiniz bir şeydir. Bu nedenle, yük veya başka bellek eşlemeli olan şey, edebileceğim bir şey şey muhtemelen sonraki bir zamanda herkes tarafından yeniden (güvenlik kısıtlamaları ile sınırlı) önbelleğe ediliyor. Makine başlatıldıktan hemen sonra, tüm fiziksel RAM bir şey için kullanılacaktır .

İşletim sisteminden yeni bir bellek sayfası istediğinizde, bellek yöneticisi bilinçli bir karar vermelidir:

  1. Sayfayı arabellek önbelleğinden temizleme
  2. Bir haritayı bir haritadan temizleme (çoğu sistemde etkin olarak # 1 ile aynı)
  3. Uzun süredir erişilemeyen bir sayfayı - tercihen hiçbir zaman - takas etmeyin (bu aslında son anda değil, proaktif olarak gerçekleşebilir)
  4. Sürecini öldür ya da rastgele bir işlemi öldür (OOM)
  5. Çekirdek panik

Seçenekler # 4 ve # 5 çok istenmeyen bir durumdur ve yalnızca işletim sistemi kesinlikle başka bir seçeneğe sahip değilse gerçekleşir. Seçenek # 1 ve # 2, kısa süre sonra tekrar ihtiyaç duyacağınız bir şeyi atmanız anlamına gelir. Bu, performansı olumsuz yönde etkiler.

Seçenek # 3, yakın zamanda yavaş depolamaya ihtiyaç duymayacağınız (muhtemelen) bir şeyi taşıyacağınız anlamına gelir. Bu iyi çünkü artık ihtiyacınız olan bir şey hızlı RAM'i kullanabilir.

3. seçeneği kaldırarak, işletim sistemini etkin bir şekilde # 1 veya # 2 yapmakla sınırlandırdınız. Bir sayfayı diskten yeniden yüklemek, takastan yeniden yüklemekle aynıdır, takastan yeniden yüklemek zorunda kalmak dışında genellikle daha az olasıdır (uygun disk belleği kararları alınmasından dolayı).

Başka bir deyişle, takas işlevini devre dışı bırakarak hiçbir şey elde edemezsiniz, ancak işletim sisteminin bellek isteğiyle ilgili olarak kullanabileceği yararlı seçenek sayısını sınırlandırırsınız. Hangi olmayabilir , ama çok büyük olasılıkla olabilir bir dezavantaj (ve bir avantaj olmayacak).

[DÜZENLE]

mmap Manpage'in dikkatlice okuyucusu , özellikle de tanımı, MAP_NORESERVE“yeterli” fiziksel belleğe sahip bir sistemde bile bir takas işleminin neden bir zorunluluk olduğunun bir başka iyi nedenini görecektir:

"Takas alanı rezerve edilmediğinde, herhangi bir fiziksel bellek yoksa, bir yazma üzerine SIGSEGV verilebilir."

- Bir dakika bekle, bu ne anlama geliyor?

Bir dosyayı eşlerseniz, dosya içeriğine doğrudan, dosya bir şekilde, sihirle programınızın adres alanındaki gibi erişebilirsiniz. Salt okunur erişim için, işletim sistemi ilke olarak farklı bir sanal sayfaya her eriştiğinizde farklı verilerle çoğalabilecek tek bir fiziksel bellek sayfasından daha fazlasına ihtiyaç duymaz (verimlilik nedenleriyle, elbette bu değil. prensipte terabayt değerindeki verilere tek bir fiziksel hafıza sayfasıyla erişebilirsiniz). Şimdi sana ne olursa ayrıcadosya eşlemesine yaz? Bu durumda, işletim sisteminde yazılan her sayfa için hazır bir fiziksel sayfa (veya takas alanı) bulunmalıdır. Kirli sayfalar geri yazma işlemi çalışmalarını gerçekleştirene kadar (birkaç saniye olabilir) verileri etrafta tutmanın başka bir yolu yoktur. Bu nedenle, işletim sistemi saklar (ancak zorunlu olarak hiç işlemez) alanını değiştirir, bu nedenle kullanılmayan bir fiziksel sayfa yokken bir haritaya yazıyorsanız (bu oldukça olası ve normal bir durum) yeniden garantili o çalışmaya devam edeceğini.

Şimdi, takas yoksa ne olacak? Bu, hiçbir takas işleminin rezerve edilemeyeceği anlamına gelir (hah!) Ve bu, hiçbir fiziksel sayfa kalmaz kalmaz ve bir sayfaya yazıyorsanız, işlem alma biçiminizde hoş bir sürprizle karşılaşacağınız anlamına gelir. bir segmentasyon hatası ve muhtemelen öldürülüyor.

[/DÜZENLE]

Bununla birlikte, RAM'in iki katı değiş tokuş yapmanın geleneksel önerisi saçmadır. Disk alanı ucuz olmasına rağmen, bu kadar takas atamak mantıklı değil. Ucuz şey israf hala savurgan olduğunu ve kesinlikle istemiyoruz sürekli içinde takas ve dışarı oluşturduğunun megabayt (veya daha büyük) boyutunda birkaç yüz çalışıyor gibi.

Tek bir "doğru" takas boyutu yoktur (kullanıcılar ve görüşler kadar çok "doğru" boyut vardır). Genellikle benim için çok iyi çalışan RAM boyutundan bağımsız olarak sabit bir 512MiB atarım. Bunun nedeni, 512MiB'nin bugünlerde her zaman küçük bir diskte bile karşılayabileceğiniz bir şey olmasıdır . Öte yandan, birkaç gigabayt takas alanını eklemek daha iyi değildir. Bir şeylerin ciddi şekilde yanlış gitmesi dışında, onları kullanmayacaksınız.

Bir SSD'de bile, takas RAM'den daha yavaş olan büyüklük emirleridir (veri yolu bant genişliği ve gecikme nedeniyle) ve takas için muhtemelen tekrar ihtiyaç duyulmayacak bir şeyi taşımak çok kabul edilebilirken (yani, muhtemelen olmayacak) tekrar takas etmek, bu nedenle mevcut sayfa havuzunuz ücretsiz olarak etkili bir şekilde büyütülür), gerçekten önemli miktarda takas seçeneğine ihtiyacınız varsa (yani, örneğin bir 50GiB veri kümesi kullanan bir uygulamanız varsa), hemen hemen kaybolmuş olursunuz.

Bilgisayarınız, gigabayt sayfa değerinde girip çıkmaya başladığında, her şey bir taramaya gider. Yani, çoğu insan için (ben dahil) bu bir seçenek değildir ve bu kadar değiş tokuş yapmak bu yüzden bir anlam ifade etmemektedir.


7
Tamamen yanlış: çekirdeğin diski kullanmaması bir avantaj olabilir, özellikle de OOM'u özelliklerine göre yapılandırdıysanız. OOM katili, temizleme işleminizi yapacak şekilde yapılandırılmışsa, disk alanını boşa harcamak ve makinenizi yavaşlatmak yerine bunu yapmak avantajlıdır.
mikeserv

22
8 GB RAM ve 8 GB takas ile 16 GB RAM takas yapmamak arasındaki fark nedir? Bilgisayarınız 16.001 GB belleğe ihtiyaç duyduğuna karar verirse, aynı şeyleri temizlemeye / öldürmeye başlamayacaktır (ancak, gerçekleşmeden önce performans krater olacaktır)?
Nick T

5
@NickT: Takas daha fazla RAM için değil, bir şeyin yakında öldürüleceği bir kırmızı bayrak kadar. Gözlerimin önünde "rastgele" bir sürecin ortadan kalkması yerine, öldürmeden önce kırmızı bir bayrak yapmayı seviyorum.
Mooing Duck

10
-1 Bu cevap hiç mantıklı değil. Heck neden daha yavaş belleğe (takas) sahip olmakla aynı hızlı bellek miktarından (RAM) daha iyi bir performansa sahip? Bir noktada, yeterli RAM'i onaylamanız gerekir, hiçbir takas yapmanız gerekmez.
Mehrdad

14
@Mehrdad: Kesinlikle mantıklı geliyor. Daha yavaş bellek (takas), "yavaş", nadiren erişen ya da hiçbir zaman erişemediğiniz şeyler için önemli olmadığı için performansı artırır. Değiştirme, "soğuk" verileri dışarı taşıyarak "sıcak" veriler için kullanılabilen bellek miktarını artırır. Saatte yalnızca bir kez bir şey yapan veya varsayılan olarak yüklenen ancak hiç kullanılmamış bir çekirdek modül tarafından ayrılan bellekler buna örnektir. Sen takas olabilir olanlar veya bunun yerine önbellekten sayfaları bırakın. Hangisi daha iyi?
Damon,

50

Burada belirtilen görüşlerin bir kısmına katılmıyorum. Özellikle bir üretim ortamında hala bir SWAP bölümü yaratıyordum. Bunu ev makinelerim ve sanal makinelerim için de yapıyorum.

Bugünlerde onları yaklaşık 1-1.5 kez belleğe boyutlandırıyorum. 2 kez bellek, kuralın üstündeydi. Takas diski "ucuzdur", çünkü yedeklenmesi ya da korunması gerekmez.

Hafızanız azalıyorsa, takas alanınız size biraz zaman kazandırır ve sorunu çözmeniz için minderler sunar.

/ Tmp gibi şeylerin takas alanı içinde bulunabileceğinin farkına varın.

Takas alanı, bir sonraki yeniden başlatmaya geri yüklenebilmesi için kısmi bir çekirdek dökümü tutabilir. Bu, gelecekteki bazı hata ayıklama acil durumları için yapmanız için iyi olabilir.


16
+1. Bir takas olması, düşük bellek altında acı performansı ile sert bir kaza arasındaki fark anlamına gelir.
Davidmh

6
@mikeserv nasıl yapılandırırsanız yapın, programınız mevcut olandan daha fazla bellek ayırmaya çalışırsa, bir şeyler çökecek veya işletim sistemi onları öldürmeye başlayacaktır.
Davidmh

6
@Davidmh: Bu nedenle, takas dosyanızın sonsuz büyük olması gerekir, aksi halde takas dosyasını tüketirken programlarınız çökmeye devam eder.
Mehrdad

6
@Mehrdad ama aynı zamanda daha pahalı. X GB RAM’e sahip olduğunuzdan, bu kadarını karşılayabileceğinizden dolayı, Y’nin bazı makul değerleri için (kullanımınıza ve boyutuna bağlı HD).
Davidmh

9
"takas alanınız size sorunu çözmek için biraz zaman ve yastık veriyor" - Ayrıca, bir bellek sızıntısı "çözülene kadar" yanıt vermeyen bir makinenin önünde çok daha uzun süre oturmam gerektiği anlamına geliyor.
Raphael

23

Olabilir:

Bu konuya çok düşündüm ve tartışmanın her iki tarafına da girdiğimden daha fazla görüş aldım. Benim yaklaşımım bulmak için bir yol geliştirmek oldu.

Yeterli bir boyut olduğunu düşündüğünüz şeyin aktif bir takas bölümü ile başlayın.

Ardından, çalışma alanında bir terminal açın ve free -hs 1kullanımı saniyede bir kez bildirecek komutu verin .

İsteğe bağlı olarak diğer çalışma alanlarına geçin.

Yapmanız muhtemel olan her şeyi ve daha fazlasını yapın. Tüm ortak uygulamalarınızı bir kerede çalıştırın, birden fazla sekmeye göz atın ve sisteme sizin için gerçek bir egzersiz programı vermek için umutsuzca deneyin; bu, derleme işlemi gerçekleştirirken 1/2 e-posta videosunu yeniden kodlamak ve e-postanızı veya herhangi bir şeyi kontrol etmek anlamına gelebilir. Gerçeklerle yüzleşelim, bu nasıl hakkında olduğunu Sen senin sistemini kullanır.

Sistemin yüksek bir yük altında olduğunu (ya da elde etme ihtimalinizin yüksek olduğu kadar yüksek olduğunu) hissettiğinizde terminale bakın ve sonuçları inceleyin. ya da daha iyisi >output.txt, tam çalışmayı inceleyebilmeniz için komuta ekleyerek çıktıyı bir dosyaya yönlendirin . Kullanılan Takas hiçbir zaman Mem Free'yi geçemezse, takas uygulamanıza gerek yoktur. Olursa, yaparsın. free.png

Değişime ihtiyacım yok. Belki yaparsın. Neden öğrenmiyorsun?

Boyut değiştirme takası söz konusu olduğunda, bu kullanım temelli soru olduğu için genel kurallar genellikle aşırı derecelendirilir.


2
Yani, takasın ancak sisteminiz kesinlikle gerektirdiğinde kullanıldığını mı söylüyorsunuz? Bu durumda, takas işleminin etkin hale getirilmesinde ceza var mı - sadece durumda? Diğer yorumlar takas varlığının bile performansa zararlı olabileceğini gösteriyor gibi görünüyor?
MrWhite

3
@ w3d Hayır demiyorum. Yukarıdaki çıktılardan görebileceğiniz gibi, gerekmese bile takas kullanılır. bu, değişim faktörü ile bir şekilde ayarlanabilir. Takas etmenin gerekip gerekmediğinden bahsediyorum.
Elder Geek

Bunu, herhangi bir zaman swapgeçtikçe yukarı doğru takas artışına kodlayabilir freemisiniz?
JFA

@JFA Bunu daha önce görmedim. Şahsen, bu amaç için belirsiz bir miktarda takas alanı ayırma kavramı konusunda güçlük çekiyorum. Teorik olarak her şey mümkün. Bu ilginç hale gelen uygulama aşamasıdır.
Elder Geek

17

NOT: Bu bana, alışılmadık bir durumda, başıma geldi. Bir sorunu gideriyorsanız, bu yararlı olabilir. TÜM makinelerin değiştirilebilir olması gerektiğini ima etmek istemem.

OLABİLİR!

Geçmişte bir sorunla karşılaştım, bir “cihazla” yaptım, Linux kullandım - kompakt bir flash cihazda çalıştırdım, takas kullanarak CF'mi takmak istemedim ve uygulama için yeterli bellek vardı.

Bu cihazların çoğu iyi çalıştı, ancak özellikle meşgul bir kutuda bir sorunla karşılaştım:

BELLEK FRAGMENTASYON

Takas alanı olmadan, hafıza giderek daha fazla parçalandı, özellikle de uzun süren işlemlerle (çok fazla boş hafızaya sahip olmama rağmen, hepsi çok küçük bir parçadaydı). Yerine biraz yer açtım ve Linux'a gerekmedikçe kullanmamasını söyledim; bu problemi tamamen çözdü.

Her şeye ek olarak, takas alanı hafızanın dolaşmasını sağlayarak birleştirir. Parçalı hafızanız varsa ve tek bir büyük yığına ihtiyacınız varsa, parçalar değiştirilecektir; geri takıldıkları için etkili bir şekilde birleştirilirler.

Check out / proc / buddyinfo - benim şu an şuna benziyor:

Node 0, zone      DMA      9      5      3      4      2      3      2      2      3      3      1 
Node 0, zone    DMA32  33901   1149      0      0      0      0      0      0      0      0      1 
Node 0, zone   Normal   2414   1632    259     22      3      0      2      0      1      1      0 

Sayılar, farklı boyutlardaki blokları temsil eder; her bir boyut, bir sonraki bloğun yarısı kadardır, soldaki 4mb bloktan, sağdaki 4kb'ye (yani, 4mb, 2mb, 1mb vb.). Yeni başlatılan bir makinenin tüm blokları solda, çok az sağda olmalıdır (= parçalanmamış). Unutmayın, aynı miktarda bellek (örneğin 4mb) sütunlar arasında farklı sayılar olarak gösterilecektir - en soldaki sütunda 1 blok, en sağdaki sütunda 1024.

Bellek havuzdan mümkün olduğu kadar doğru bir şekilde tahsis edilir; örneğin, programınız 12kb hafıza istiyorsa (bir seferde), bunu 16kb sütundan alacaktır; kalan 4kb sütunda görünecektir. Eğer 16kb blok yoksa, o zaman 32kb bloktan alacak ve 16kb ve 4kb kalacaktır.

Yeterince büyük bellek bloğu yoksa ve YERİ DEĞİŞTİRDİNİZ, ardından örneğin 16kb hafıza kullanmak istiyorsanız, en az kullanılan 16kb bloğunu (örneğin 4kb kullanılmış bir blok, 4kb kullanılabilir bir blok içerebilir) ve 2 tane daha kullanılan 4kb blok), KULLANILAN kısımları sadece değiştirmek için hareket ettirin ve serbest belleği yeni uygulamaya tahsis edin.

Düşen kutuda, yüzbinlerce 4kb ve 8kb blok vardı, başka bir şey yoktu.

Söyleyebileceğim kadar hızlı (çöken makinelerden geçerek!) Çekirdek bellekten değiş tokuş edecek ve belleğe değişecek, fakat asla bellekten belleğe geçmeyecek.


3
Davanız, hugepage'leri ayırmak / uygulamak için iyi görünüyor. Parçalanma sorunlarından kaçınır (çünkü tahsis edildikten sonra belirli bir büyüklükte bir sarkaç sayfası bundan sonra ve sonsuza dek sadece bu boyutta tekrar tahsis edilir) .
mikeserv

2
Bu, şimdiye kadar bir takas bölümü kullanarak lehine okudum en iyi nedeni. Hızlı bir arama yaptım ve bu konuda referans bulamadım, bu özelliğin neden daha sık belgelenmediğini merak ediyorum.
마 SE

1
(saydam olmayan) hugepages, uygulamanız tarafından kullanılamayabilir. Genellikle tonlarca belleğe ihtiyaç duyan uygulamalar bunları kullanabilir; örneğin, veritabanı sunucuları, java jvm. Açık bir şekilde etkinleştirilmeleri gerekir ve başka amaçlar için kullanılamayan ayrı bir hafıza havuzu haline gelirler. Durumunuza bağlı olarak, bu iyi olabilir veya kötü olabilir. Ayrıca, Şeffaf sarkaçlar hakkında bilgi edinin. Bunlar, uygulamalarınız nasıl yapılacağını bilmese de, hugepage'ler (performans iyileştirmeleri için) kullanmanız için işleri dolaştırmaya çalışır. Hafıza parçalanmışsa, hugepage süpürücüsünün yapması gereken daha fazla şey olduğu için işler güneye gidebilir.
Dan,

1
Flash cihazınızla ilgili deneyiminizden şüphe duymuyorum, sadece sunduğunuz tek kullanımlık durumun muhtemelen takas işlemine eşdeğer olduğuna ikna olmadım ve bellek parçalanmasının takas takma işlemiyle ilgili olduğuna ikna olmadım. Kolayca test edilebilecek ve ispatlanabilecek ya da kanıtlanamayacak ilginç bir soruyu gündeme getirmektedir.
Yaşlı Geek

1
Takip eden soru . “Bellek parçalanması” ile ne demek istiyorsunuz? MMU, bazı sanal adres alanlarındaki ardışık sayfalar için kullanılan fiziksel sayfaların ardışık olup olmamasını önemsemez. Fiziksel sayfalar bölünmüş, ancak bu önemli değil (tek bir küme fiziksel makinede normal uygulama belleği konuştuğumuz sürece ve örneğin bir çevre birimi veya hiper yönetici tarafından kullanılan bellek sayfaları değil). Bir program 16kB istediğinde, fiziksel bellekte herhangi bir yere yakın olabilecek veya olmayabilecek dört sayfa alır.
Gilles

15

Bir takas bölümünün, tükendiğinde fazladan bir RAM gibi davranmasının üzerinde ve ötesinde önemli bir değeri vardır.

Birincisi, Linux dosyaları ve IO işlemlerini önbelleğe almak için mümkün olduğunca fazla bellek kullanır, eğer bir miktar takasınız varsa, daha fazla belleğin IO'yu önbelleğe almaya ve daha hızlı (disk erişimini en aza indirerek ve ayrıca SSD'lerde yıpranmayı azaltarak) tersine çevirdiğini görebilirsiniz Bazı programların tahsis ettiği verileri tutmak, ancak bazı daemon'lar için geçerli olabilecek her 12 saatte yalnızca bir kez kullanıyor.

Ayrıca, Linux, doldurmak için gerçek belleğe sahip olduğundan emin olmasa bile, sayfaların nominal olarak tahsis edilmesine izin verecek iyimser bir bellek ayırma stratejisi kullanır. Bu, her tahsisat için uygun bir kontrol ve harita yapmaktan daha etkilidir ve genellikle sorun yaratmaz. Bununla birlikte, çekirdeğin bir tahsise izin verip vermediğini belirlemek için kullandığı sezgisel tarama sistemde mevcut takas düzeyini içerir, bu nedenle, çok fazla kullanılmasa bile, sistemde çok fazla takas varsa tahsisler daha hızlı olabilir.

Bu faktörler birlikte beni kişisel olarak bana hemen hemen her normal sistemde biraz takas etmenin daha iyi olduğuna inanmamı sağlıyor, ancak büyük ram boyutları için ram * 2 kuralını görmezden geliyorum ve takasımı 4-8GB'da kapatıyorum (diskin boyutuna bağlı olarak) ).


9
4GB bile bir masaüstü için çok büyük. Bir şeyler ters giderse, bu kadar değiş tokuşun dolmasını beklemeden önce OOM katilinin aktif olmasını tercih ederim. (Daha fazla ihtiyaç duyduğum bir durumla karşılaştığımda, herhangi bir büyük işin gerektirdiği herhangi bir sanal belleği makinemdeki RAM'den daha fazla çalıştırmadan önce, DOSYA'yı değiştirebilir ve değiştirebilirdim. Yani, web tarayıcımdan çıkmak yeterince serbest değilse ...)
Peter Cordes

@PeterCordes Muhtemelen ne tür işler yaptığınıza bağlı olarak, tamamen anlıyorum. Kişisel olarak, makinemi kullanırken arka planda genellikle düşük öncelikli derlemeler yaptığım için yüksek takas seviyelerinden faydalandığımı görüyorum, bunlar daha sonra bellek aksi taktirde (genellikle herhangi bir derleme yapmak için çok meşgul olduğunda) Neyse). Yine de, çok kişisel bir iş yükü tabanlı bir şey olduğuna katılıyorum, karar vermeden önce her zaman kendi kullanımı hakkında düşünmelisiniz.
Vality

1
komik hikaye: bugün, dizüstü bilgisayarımda 4GB RAM, 0.5G swap (SSD), firefox OOM katilini tetikledi (firefox aldı). Daha önce böyle bir şey olmamıştı. (Dizüstü bilgisayarımı normalden daha fazla kullanıyor olmama rağmen). Neredeyse hiçbir şey koşmuyordu (xfce'deki gnome-terminali). Sanırım onunla iyi olduğumu düşünüyorum, çünkü firefox çok fazla RAM bağlamaktan daha iyisini bilmeli. Birinin bir süre önce "sanal bellek alt sistemini vurgulamak için web tarayıcıları var" ya da böyle bir şey söylediğini gördüm. Firefox, günlerce kullanılmamış sekmeler için vb. Önbellekleri boşaltmakta oldukça kötü.
Peter Cordes

3
Linux'un kullanılabilir takas alanını düşündüğü bir durum, büyük bir sürecin çocuk başlatmaya çalıştığı durumdur: fork () + exec () sistemi çağrıları, ebeveyn tahsisini kabaca çoğaltarak başlar - çekirdek, yeni çocuğun daha küçük olacağını garanti edemez ebeveynden Değişim alanı tipik olarak kullanılmaz, ancak mevcut olmadıkça çatal () başarısız olabilir. Bir müşteriye tipik bir örnek, bir eklenti başlatan veya büyük bir uygulama kabı bir yardımcı program çağırdığında bir sunucuda bulunan bir tarayıcıdır. Sorunu çözmek için genellikle 1/2 veya 1 GB takas yeterlidir. Google "java exec belleği ayıramaz"
James

13

Çekirdeğin içeri / dışarı kaydırılmasını beklerken tahammül edebileceğiniz maksimum boyuttan daha büyük bir takas yapmamalısınız; Aksi takdirde, sadece sisteminiz için yeni bir arıza modu yaratıyorsunuz (takas sırasında telafi edilemez şekilde tıkanıyor). Modern sürücülerin GB / sn'nin üzerinde aktarabilmesine rağmen, Linux'un genellikle takas oranlarını yalnızca yüzlerce kB veya daha iyi bir saniyede en fazla bir MB satırında daha hızlı hareket ettirebildiğini unutmayın. Büyük değişim, sisteminizi dakikalar, saatler ve hatta günlerce kullanılamaz hale getirebilir.

Yaptığınız şey için yeterli fiziksel belleğiniz varsa, takas için ideal boyut, onu "önemsiz veri" işlemlerinin sakladığı, ancak hiç kullanmadığı miktarlarla eşleştirmektir. Bu muhtemelen birkaç ila birkaç yüz megabayt arasındadır. Bu strateji, muhtemelen bir daha asla kullanılmayacak olan veriler için kalıcı depo olarak değil, yararlı bilgilerin önbelleğe alınması için tüm fiziksel belleğinizin kullanılmasına izin verir.

Yeterli fiziksel belleğiniz yoksa, ağır değişimden kaynaklanan ağır yavaşlamaları tolere edip edemeyeceğinizi değerlendirmeniz gerekir. Öyleyse, 1-2 GB'a kadar takas yapabilmek anlamlı olabilir ve eğer aşırı hızlı sürücüleriniz varsa, belki de 4 GB'a kadar. Fakat bundan daha fazlası, sisteminizin arıza modlarını daha da kötüleştirecek ve bunun yerine sadece daha fazla RAM almayı düşünmelisiniz.


2
Bence bu en iyi cevap. Çok fazla değiştirme alanınız varsa, tüm değiştirme nedeniyle makineyi tamamen tepkisiz hale getirebilir. Bu, rahatsız edici süreci öldüremeyeceğiniz anlamına gelir. Takas alanını azaltırsanız, OOM katili işinizi otomatik olarak sizin için yapar. Dosya arabelleği önbelleğe alma ile ilgili diğer yanıtlardaki argümanlar tamamen ikna edici değildir. Çekirdeğin, takas için dosya arabelleğini taşıyabilmesi için ... takasın olması gerekir; hangisi diskte? Lütfen.
Timmmm

Bulabildiğim takas alanı karşısındaki tek argüman şudur: "bazı programlar belleği sızdırıyor". Ve? OOM katili, kurtarmadığınız önemli bir şeyi öldürürse, çalışmanızı etkili bir şekilde kaybettiniz. Bu, bu argümanın tamamen alakasız kaldığı anlamına gelir, sadece çok fazla bellek kullanan ve çoğu zaman değiştirilen düşük öncelikli görevler için yüksek takas alanı varken makinemi kapatmaya aynı etkiye sahip olmaya zorlayabilirim. Makineniz böyle bir durumda sıkışırsa, bu sizin hatanızdır. Başıma gelen tek zaman kendimi tüm çalışma hafızasını dolduracak bir program yazmamdı.
Sahsahae

11

Yalnızca takas yapmak için hazırda bekletme modunu kullanabilmek istiyorsanız (Bu özelliğe "diske askıya alma" da denir ve tüm RAM içeriğini kaydetmeyi ve gücü kapatmayı da içerir). Genellikle bu yalnızca dizüstü bilgisayarlarda ve diğer mobil cihazlarda kullanılır, bu nedenle bağlıdır.


6

Evrensel ve net bir cevap yok çünkü yapmak üzere olduğunuz göreve bağlı. DB, HTTP, Sanallaştırma veya Önbellek sunucusunu çalıştırmak üzeresiniz, sahip olduğunuz ram miktarına bakılmaksızın, herhangi bir takas türünü asla etkinleştirmemelisiniz. Masaüstü veya karma görevli bir sunucunuz varsa ve 16+ Gb hızlı RAM’iniz varsa - buraya bakın: zRam


zRam mükemmel bir seçimdir. İyi etki için küçük flash sürücü sistemleri ile birlikte kullandım.
Elder Geek

1
@ElderGeek Bunu ayrıca disksiz bir ortamda kullandım, örneğin ağ önyüklemesi. Harika iş, ama bazı uyarılar var: ilk önce, sadece daha fazla koça ihtiyacınız yok, HIZLI olana ihtiyacınız var. Her zamanki gibi klasik bir durumda bile size uygun olan yavaş ve ucuz ram modülleri bir soruna neden olabilir. CPU Front-Side veriyolu da dikkate alınmalıdır: daha yavaş bir CPU frekansına sahip olsanız bile, ancak daha hızlı bir FSB frekansı performansınızı büyük ölçüde artıracaktır. İkinci endişe, zRam takas bölümlerinin bir kısmıdır. 1'den CPU çekirdeği numaralarına sayıları deneyin. Tek çekirdekli sistemlerde kullanmayın!
Alexey Vesnin

Tüm geçerli geçerli puanlar. Ben bir performans meraklısıyım ve her zaman kendi sistemlerimi tasarlayıp inşa ediyorlarsam, şahsen böyle endişelerimden rahatsızlık duymuyorum
Elder Geek

@ElderGeek beni de :) tanıştığımıza memnun oldum! Ayrıca zRam davranışında garip bir şey fark ettim. Farklı çekirdek sürümlerinde ve yapılandırmalarında görünür ve kaybolur, ancak çekirdek HZ 100 ve 1000'de yüksek oranda yeniden üretilebilir. ZRam 1,2,4 için iyi çalışır - ancak daha fazla bölümlendirme yapmaz. Neredeyse boşta görevlerde üst donanımda 8 ve 16 fiziksel çekirdeklerde bile. Yani akılda tutmak tweaks ile oynuyor! Rusya'dan selamlar!
Alexey Vesnin,

"Bir db çalıştırırsanız, sahip olduğunuz ram montajına bakılmaksızın herhangi bir takas işlemini asla etkinleştirmemelisiniz" ile aynı fikirdeyim. Değişim genellikle OOM katilini öldürme rasgele süreçlerde tercih edilir. Evet, çalıştırdığınız uygulamalar için yeterli belleğe sahip olmanız gerekir ve evet, büyük miktarda takas kullanmak sisteminizi yavaşlatabilir. İdeal bir dünyada yaşamanı kıskanıyorum.
AMADANON Inc.

5

Takas alanına ihtiyacınız olup olmadığını söylemenin bir yolu yoktur, bildiğimiz tek parametre kurulu RAM miktarı olup olmadığını.

Her durumda, takas alanına sahip olmanın sistem performansını olumsuz yönde etkilediği yaygın bir yanılgı vardır. Bu yanlış. Yeterli RAM'e sahip olduğunuz sürece, büyüklüğü ne olursa olsun değiş tokuş alanını kullanmak performansınıza zarar vermez. Performansı etkileyen şey RAM'de kısa olmak ve takas alanını etkin kullanmaktır.

  • durum 1: Eğer takas alanınız yoksa ve RAM'in dışındaysa, Linux çekirdeği iyi aday olduğunu düşündüğü bir ya da daha fazla işlemi seçecek ve onları öldürecektir.

  • durum 2: Eğer bir takas alanınız varsa ve RAM’in dışındaysa, çekirdek daha az kullanılmış bellek sayfalarını seçecek ve onları RAM’i boşaltmak için takas alanına yerleştirecektir. Bu, sistemi yavaşlatır, ancak uygulamalarınız aksi takdirde etkilenmez.

Çekirdek uygulamalarımın öldürmeye değer olduğunu düşündüğü için parçaları kaybetmeme ya da çalışmamdan rahatsız olduğum için her zaman 2. olayı tercih ediyorum. Dahası, ortalama bir diskin mevcut büyüklüğü TB aralığında olduğundan, takas için yüzde birkaç ayırma sorun olmamalıdır.


6
Durum 1'i tercih ediyorum, çünkü RAM'i tükettiğim tek zaman kaçak bir programım olduğu zamandı. OOM katili genellikle kaçakları tespit etmede oldukça iyidir ve gerçekten birkaç saatlik ağır bir değişimden sonra hemen öldürülmesini tercih ederim.
Mark

1
@Mark, Bu geçerli bir nokta. Yine de ilk önce bir algoritma kullanmaktan kaçınmaya çalışıyorum, daha sonra yaklaşıyoruz.
jlliagre

2
2. durum yalnızca, sizi bu durum hakkında uyaran bir şey varsa ve sistem değişmeden önce el ile "bir şeyler yapmak" için yeterli zamanınız varsa geçerlidir. Ancak aynı sonuçlar için kullanılmış RAM yüzdesini de izleyebilirsiniz.
Totor,

1
Sebeplerinizi temel alarak RAM kullanımını izlemek yeterlidir .
Totor

1
@Totor Dizüstü bilgisayar izleme uygulamam tarafından gecenin bir yarısında uyandırılmamayı tercih ediyorum çünkü bir sürü dosyayı işleyen ve RAM'i tüketen bir toplu iş başlattım. Bütün işlerin kesintiye uğramasından ziyade RAM'in boşalmasından dolayı birkaç saat sürse bile, yapılacak işin yapılmasını tercih ediyorum.
jlliagre

3

Herhangi bir sistemde takas uygulamak kuralım bunun cevabını vermektir:

  • Sistemin amacı nedir?
  • Uygulamalar ne kadar hafıza tüketecek?
  • Bu kritik bir sistem mi?
  • Dosya aktarımı için geçici bir disk alanına ihtiyacım var mı?
  • Uygulamaların öngörülen büyüme oranı?

Bu bilgiyi cevapladığımda sistemi buna göre boyutlandırıyorum. Daha önceki yıllarda Sun Microsystem'ın kurallarını yapıyordum. SWAP için 16 GB'a kadar iki kat RAM, 16 GB'dan aynı miktarda. Ancak diğer taraftan, yedeklemek için yeterli RAM'iniz varsa ve uygulamalarınız SWAP'ı zorla kullanmıyorsa, takas işlemlerini kaldırabilirsiniz. İhtiyacınız varsa, yeni bir disk veya lun koymak ve SWAP'ı yapılandırmaktan ibarettir. Sun'ın kuralı çoğunlukla, “çekirdek panik” olması durumunda Solaris'te bellek, daha fazla analiz için takas etmek için tamamen boşaltılacaktı.


1

Takas edilecek gerekli yeterince RAM yoksa tüm programları çalıştırmak için.

Çok fazla RAM gerektiren hiçbir şey yapmadığınızı söylüyorsunuz. Yani, yeterli RAM'in var.

O zaman, takas alanına ihtiyaç duymazsınız.

Ancak , bir noktada, sorunuzda neye ima ettiğinize rağmen, programlarınızın kullanacağını düşünüyorsanız, RAM'inizin yarısını (veya üçte ikisini) söyleyiniz, o zaman lütfen diğer "takas kurallarını" okuyunuz. "cevaplar. Değiş tokuşa ihtiyacınız olmayacak , ancak sistem performansınızı artırabilir .


Takas kullanmak felaketle sonuçlanabilecek bir kazadan kaçınmaya yardımcı olabilir, ancak hiçbir zaman bir paraşütten daha fazlası ferrariyi hızlandıracak şekilde performansı arttırmaz. ;-)
Elder Geek

@ElderGeek Bir kenar durum olabilir, ancak takas yardımcı olabilir. Her şey için yeterli RAM'e sahip olduğunuz zamanlar vardır, ancak RAM'i daha iyi kullanmak için boşta kalan programlar değiştirilebilir (örneğin, bazı yararlı disk önbellekleri). 90'ların sonlarında bunu çok görüyordum. Bunu şimdi bazen, gerçekten takas alanına ihtiyaç duymadan <1GB boş RAM (disk önbellek dahil) kullandığımda görüyorum.
jbo5112 22.03.2015

@ jbo5112 Böyle söylerseniz, deneyimim şu ana kadar aksi gösterilemedi. Bu, sistemin zor ve hızlı bir kuraldan daha çok kullanılmasının (herkesin aradığı gibi) bir durum olması nedeniyle şaşırtıcı değildir.
Elder Geek

@ElderGeek Sadece şu an görebiliyorum çünkü disklerim on yıl eski ve çaresiz önbellek ihtiyacında. Genellikle, takas alanını çok agresif bir şekilde kullanmaya neden olan hemen hemen her durumda çok fazla ayarlanmış ek bir takas problemi vardır. Değeri 60'tan 10'a düşürmek ortak bir öneri gibi görünüyor. Daha da düşürebilirsiniz, ancak bir noktada çok fazla disk önbelleği bırakacaksınız, bu da takas yaparken çok fazla G / Ç'ye neden olacak.
jbo5112

@ jbo5112 İyi nokta. Her zaman farklı alt sistemler arasında dengeleyici bir eylemdir. Seagate ST225 ve ST238 sürücülere sahip 80286 sistemden maksimum performansı sıkıştırmak için sabit disk iç içe geçme ve RAM yenileme hızı gibi ince ayarların yapıldığını hatırlıyorum. Maksimum performansı ve güvenilirliği azaltmak için durumlara vaka bazında yaklaşmak zorundayız. Tebrikler BTW! En son on yıl boyunca bir sürücüyü sıkmayı başarabildim, toplamda 600 MB'lık bir mikropolis vardı.
Elder Geek

0

Kısa cevap:

Evet, bir uygulamanın eşleme hafızasını zahmet etmemesi, ancak sanal hafızayı doğrudan eşleştirmesi ihtimalinin düşük olması ihtimaline karşı her zaman takas yapmanız gerekir.

Takas dosyanızı ayarlayın:

  • RAM+round(sqrt(RAM)) hazırda bekleme modunu kullanıyorsanız
  • round(sqrt(RAM)) eğer yapmazsan

swappinessMasaüstünde 10 olarak ayarlayın , ancak bir sunucuda değil!

Uzun cevap:

Geçmişte:

Son 25 yıldır kullanımda olan kurallar en az 1xRAM ve en fazla 2xRAM olmuştur, bu yüzden her zaman alıntı yaptığınız şeydir.

Bu minik ben gençken ve dinozorlar hala Dünya'da dolaştığında taş çağında tekrar belirlendiler çünkü RAM çok pahalıydı ve kesinlikle bir şeyi başarabilmek için bu takas alanına ihtiyacınız vardı.

Azalmış geri dönüşler nedeniyle maksimum o zaman ayarlandı: HDD erişimi 1000'den daha yavaş bir RAM faktörü olduğundan RAM'i değiştirmek için çok yavaş: çok acil bir durumda, ancak günlük kullanım için gerçekten iyi değil! O zaman, takas alanınız tükendiğinde, daha fazla RAM eklemek zamanı gelmişti! (bugün hala geçerlidir).

Şu anda:

  1. Eğer hazırda beklemeyi kullanmayın ve hafıza 1GByte aşan ise başparmak yeni kural round(sqrt(RAM))nerede RAMbesbelli GB RAM boyutudur.

  2. Hazırda bekletme modunu kullanıyorsanız, RAM + diskinin tamamını değiştirilmiş RAM miktarını diske değiştirebilmeniz gerekir, böylece formül şöyle olur: RAM+round(sqrt(RAM))

  3. Azalan döndürmeler kuralı bugün hala en yüksek seviye için geçerlidir, ancak fiili kullanımınızı test etmediğiniz sürece, 2xRAM almak sadece bir disk alanı kaybıdır , bu nedenle diğer metodolojileri kullanarak takas alanınız tükenmediği sürece maksimum kullanmayın .

Bunların hepsi birlikte aşağıdaki tabloyu verir: (takas alanını gösteren son 3 sütun)

    RAM   No hibernation    With Hibernation    Maximum
    1GB              1GB                 2GB        2GB
    2GB              1GB                 3GB        4GB
    3GB              2GB                 5GB        6GB
    4GB              2GB                 6GB        8GB
    5GB              2GB                 7GB       10GB
    6GB              2GB                 8GB       12GB
    8GB              3GB                11GB       16GB
   12GB              3GB                15GB       24GB
   16GB              4GB                20GB       32GB
   24GB              5GB                29GB       48GB
   32GB              6GB                38GB       64GB
   64GB              8GB                72GB      128GB
  128GB             11GB               139GB      256GB
  256GB             16GB               272GB      512GB
  512GB             23GB               535GB        1TB
    1TB             32GB              1056GB        2TB

Yukarıdakiler sadece bir kuraldır; yerçekimi kanunu değil!
Sen olabilir eğer belirli bir kullanım durumu farklıdır (yerçekimi kanunu aksine) bu kuralı kırmak!

Profesyonel ipucu: SWAP'ı her zaman bir HDD'nin başlangıcında, kafaların diskin içinde daha az hareket etmesi gerektiğinden ayırın.
Evet: SSD'lerde, takas alanını nereye yerleştirdiğiniz konusunda hiçbir şey farketmez, çünkü hareketli kafalar yerine kuantum tüneli kullanırken modern SSD'ler, kuantum bozulmasını önlemek için tüm hafıza hücrelerini (ayrılmamış alan) kullanır.

Takas kullanımınızın "genel" kuraldan farklı olup olmadığı nasıl test edilir:

Sadece yürütün:

for szFile in /proc/*/status ; do 
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' $szFile 
done | sort --key 2 --numeric --reverse | more

Bu, size takas edilen tüm çalışan programların bir listesini verecektir (en üstteki takas alanını kullanan)

Birkaç KB'den daha fazla kullanıyorsanız: minimumdan daha fazla yeniden boyutlandırın, aksi halde rahatsız etmeyin ...

Eğer bir sunucuysanız şimdi okumayı bırakın: hepiniz hazırsınız!


Bir masaüstü / dizüstü bilgisayar istemcisindeyseniz (sunucu değil), GUI'nizin olabildiğince duyarlı olmasını ve yalnızca gerçekten gerektiğinde yer değiştirmesini istiyorsunuz . Ubuntu, sunucu kullanımı için erken takas yapmak üzere optimize edilmiştir, ancak müşterinizde bu büyük 250 Mega-piksel ham resmin gimphızlı olmasını sağlamak istersiniz , bu nedenle 10'unuzu ayarlamak swappiness, çekirdeğin çok erken değişmesini önler, t çok geç takas:

sudo nano /etc/sysctl.conf

ve Ekle:

# change "swappiness" from default 60 to 10 
# (theoretically only swap when RAM usage reaches around 80 or 90 percent)
vm.swappiness = 10

Dosyanın sonuna, dosyayı kaydedin ( Ctrl+ XY+ Enternano) ve a:

sysctl --system

Parametreyi yeniden yüklemek veya sadece eski zamanların iyiliği için, Window $ yaklaşımını kullanın ve yeniden başlatın ... :-)


-1

Uzlaşmacı cevap: "olması gerektiği" nin anlamına bağlıdır.

Eğer Do gerek size açıklamak çalışma koşulları altında bir tane yoksa kötü bir şeyler olacağı anlamda bir takas bölümü? Hayır.

Yanlışlıkla bir bellek domuz ordusunu ortaya çıkarmanız durumunda takas bölümü olması akıllıca olur, böylece OOM katili devreye girmeden önce onları öldürme şansınız olur mu? Evet.

Fiziksel RAM'iniz "büyük ölçüde", her zaman aynı anda çalıştıracağınız tüm programların veri belleği kullanımını aşıyorsa, takas etmenin performans avantajı yoktur. Aşar ancak "büyük ölçüde" değilse, işletim sistemi daha sık erişilen dosya verilerini bellekte saklamak için nadiren kullanılan belleği değiştirebiliyorsa, performans avantajı olabilir.

Özetle, 16GB RAM’iniz olması harika. Ancak, 1TB'lik bir diskiniz varsa, takas için 16GB'ını ayıramaz mısınız? Diskin sadece% 1,5'i.

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.