Neden çoğu insan takası 10-20'ye düşürmeyi öneriyor?


65

Daha iyi performans için değişebilirliği 10-20 seviyesine düşürmeyi öneren birkaç sitede gördüm.

Bir efsane mi değil mi? Bu genel bir kural mı? 4GB Ram ve 128GB SSD sabit bir dizüstü bilgisayar var, takasım için ne değer önerirsiniz?

Teşekkürler.


5
Listelediğiniz siteler, varsayılanı değiştirmeyi neden önerdiklerini açıklamıyor. Buradaki cevaplar, karmaşık bir konu hakkındaki bu zor seçim için çok daha iyi.
nealmcb,

Yanıtlar:


88

Çünkü çoğu kişi değiş tokuş yapmanın kötü olduğuna ve değiş tokuş yapmazsanız sistemin gerçekten gerekmediğinde değiş tokuş edeceğine inanıyor. Bunların hiçbiri gerçekten doğru değil. İnsanlar takas sistemlerini tıkanmış zamanlarla ilişkilendirir - bununla birlikte çoğunlukla takas edilir, çünkü sistem tersine tıkanır, tersi olur. Sistem değiştiğinde, takas etme kararında performans maliyetini çoktan etkilemiş olacaktı ve bunu yapmamanın sistem performansı veya istikrarında daha büyük bir toplam ceza almasına karar verecekti.

Genel olarak, varsayılan ayarlar iyi bir genel performans ve kararlılıkla sonuçlanır. Varsayılan ayarda bırakmanızı tavsiye ederim. Linux'un bazı ileri vakaları çözmek için bellek yönetimini iyileştirmesi için başka yollar da var, ancak büyük ölçüde swappiness kontrolü iyi bir geçici çözüm değil - tek bir yöne ayarlayın ve bir sorunu düzeltip başka sorunlar yaratabilirsiniz. Mümkünse, sadece daha fazla fiziksel RAM (ve yalnızca değiş tokuş etmek bırakarak) kurmak, diğer tüm çözümleri kapatır.

Linux RAM nasıl kullanır?

Uygulamalar tarafından kullanılmayan herhangi bir RAM "önbellek" olarak kullanılabilir. Önbellek hızlı, sorunsuz çalışan bir sistem için önemlidir, hem okuma hem de hızlanmasını hızlandırır.

Uygulamalarınız, bellek kullanımlarını neredeyse tüm RAM'lerinizi kullandıkları noktaya kadar yükseltirse, önbelleğiniz küçülür ve bunun sonucunda ortalama disk işlemleri yavaşlar. Bugünlerde önbellek için yalnızca onlarca megabayt veya daha azına sahip olmak yeterli değildir.

Uygulamalar belleklerini daha da arttırırsa - takas alanınız olmadığını varsayarsak - yalnızca önbellek için alanınız olmaz, ancak sonunda bellek yetersiz kalır ve sisteminiz çalışan işlemleri sonlandırmak zorunda kalır. Öldürme işlemleri, kararsız, öngörülemeyen bir sistem sağladığından yavaşlamaktan daha kötüdür.

Linux, takas yöntemini nasıl kullanır?

Bu sorunların her ikisiyle de mücadele etmek için, sisteminiz nadiren kullanılan bazı uygulama belleğini diskinizdeki takas alanına yeniden ayırabilir ve RAM'i serbest bırakabilir. Ek RAM, yetersiz bellek nedeniyle işlemlerin bitmesini önleyebilir ve disk işlemlerinin daha sorunsuz çalışabilmesi için küçük bir önbelleği geri alabilir.

Bu yeniden tahsis kesin bir kesime göre yapılmaz. Linux değişmeye başladıktan sonra belirli bir tahsisat yüzdesine erişemezsiniz. "Bulanık" bir algoritmaya sahiptir. En çok "hafıza tahsisi için ne kadar baskı var" ile tanımlanabilecek birçok şeyi dikkate alır. Yeni bellek tahsis etmek için çok fazla "baskı" varsa, o zaman daha fazla yer açmak için bazılarının değişme olasılığı artacaktır. Daha az "baskı" varsa, bu şansı azaltacaktır.

Sisteminizde, bu "baskının" nasıl hesaplanacağını ayarlamanıza yardımcı olacak bir "takas" ayarı vardır. Genellikle "RAM yüzdesi" olarak gösteriliyor ancak bu, formülün bir parçası olarak kullanılan bir değer değil. 40 ila 60 arasındaki değerler önerilen akıl değeridir, 60 bugünlerde varsayılandır.

Zorunlu olduğunda sisteminizin değişmesine izin vermek, çok fazla RAM olsa bile, genel olarak çok iyi bir şeydir. Sisteminizin, geçici olarak bile olsa düşük bellek durumuyla karşılaşırsanız (çok fazla bellek kullanan kısa bir işlem yürütürken), sisteminizin her şeyin çalışmasını sağlamada ikinci bir şansının olacağı konusunda size gönül rahatlığı sağlamanız gerekiyorsa değiştirmesini sağlayın. Tamamıyla değiş tokuş yapmayı devre dışı bırakacak kadar ileri giderseniz, bellek ayıramadığınız için süreçleri öldürme riskiniz vardır.

Sistem kapatılıp ağır şekilde değiştirilirken neler oluyor?

Değişim işlemi yavaş ve maliyetli bir işlemdir, bu nedenle sistem önbellek performansındaki değişimin genel olarak telafi edeceğini veya öldürme işlemlerinden kaçınılması gerekmediğini hesaplamadığı sürece sistemden kaçınır.

İnsanlar çoğu zaman diski ağır şekilde kıran sistemlerine bakacak ve çok fazla takas alanı kullanacak ve bunun için takas etmekle suçlayacaklar. Bu almak için yanlış bir yaklaşım. Eğer takas yapmak hiç bu kadar aşırı noktaya ulaşırsa, takas işleminin sisteminizin düşük bellek sorunlarıyla başa çıkma denemesi olduğu, sorunun nedeni değil ve çalışan sürecinizi değiştirmeden rasgele olarak öleceği anlamına gelir.

Masaüstü sistemlerinden ne haber? Farklı bir yaklaşım gerektirmiyorlar mı?

Bir masaüstü sisteminin kullanıcıları, sistemin, gerekli belleğin artmasından dolayı bazen bir takas işlemini tetikleyebilecek bir eylem türü olan, bir uygulamayı açmak gibi kullanıcının başlattığı eylemlere cevaben "duyarlı" olmalarını bekler.

Bazı kişilerin bunu düzeltmeye çalışmasının bir yolu, sistemin belleği tüketen ve önbellek boşluğu az olan uygulamalara toleransını artırabilecek olan takas parametresini azaltmaktır.

Ancak, bu sadece değişen hedefleridir. İlk uygulama şimdi bir değiştirme işlemi olmadan yüklenebilir, ancak yüklenen bir sonraki uygulama için daha az gevşeklik bırakacaktır. Aynı takas, daha sonra, bunun yerine bir uygulamayı açtığınızda ortaya çıkabilir. Bu arada, sistem performansı düşük önbellek boyutundan dolayı genel olarak düşüktür. Bu nedenle, azaltılmış takas ayarından herhangi bir kazancın ölçülmesi zor olabilir, bazı zamanlarda takas gecikmesini azaltır, ancak diğer zamanlarda başka yavaş performansa neden olur. Ne yaptığınızı biliyorsanız, değiş tokuşun biraz azaltılması gerekçeli olabilir, ancak% 10'a kadar düşürmek sistemi çok düşük önbellek boyutlarına toleranslı bırakabilir ve sistemi kısa sürede takas etmek zorunda bırakabilir.

İşlemlerin çökmesine veya ölmesine neden olabilecek yetersiz bellek koşullarına karşı ek koruma kaybederken, takas işleminin tamamen devre dışı bırakılması önlenmelidir.

Şimdiye kadarki en etkili çözüm, paranızın karşılığını daha fazla RAM takmak.

Yine de çok RAM olan bir sistemde takas işlemi devre dışı bırakılabilir mi?

Uygulamalar için ihtiyaç duyduğunuzdan çok daha fazla RAM’iniz varsa, nadiren takas yapmanız gerekir. Değişimi devre dışı bırakmak muhtemelen çoğu zaman bir fark yaratmaz. Ancak, fazla miktarda RAM'iniz varsa, takas özelliğini etkin bırakmak aynı zamanda herhangi bir ceza almaz çünkü sistem gerekmediğinde takas yapmaz.

Hangi yalnızca durumlar olur fark yaratacak sistem kendisi bellek ve dolayısıyla önbellek sistemi engellenmektedir oluyor bitiyor bulur olası bir durumda olurdu ve bunu olurdu bu tür durumlar öyle istiyorum en takas. Böylece, bol miktarda belleğiniz olduğunda olumsuz bir etkisi olmadan, daha fazla gönül rahatlığı için takas işlevini normal ayarlarında güvenle bırakabilirsiniz.

Peki takas sistemimi nasıl hızlandırabilir? Yavaş yavaş şeyler değişmiyor mu?

RAM'den değiş tokuş etmek için veri aktarma işlemi yavaş bir işlemdir, ancak yalnızca çekirdeğin makul bir önbellek boyutunu korumanın bir sonucu olarak genel faydadan daha ağır çıkacağından emin olması durumunda alınmaktadır.

Veri takas edildiğinde, tekrar ne zaman çıkıyor?

Belleğin verilen herhangi bir kısmı, kullanıldığında veya okunduğunda, en kısa sürede değiştirilecektir. Bununla birlikte, tipik olarak değiştirilen hafıza, uzun zamandır erişilmeyen ve yakında ihtiyaç duyulması beklenmeyen bir hafızadır.

Verileri takas dışına aktarmak, oraya koymak kadar zaman alıcıdır. Çekirdeğiniz gerekmediğinde verileri ondan kaldırmaz. Veri takas ve değil kullanılıyor olsa da, başka şeyler için daha fazla bellek bırakır edilir kullanılıyor ve daha sistem önbelleği.

Değişimin azaltılmasının uygun olduğu durumlar var mı?

Evet. Sistem önbelleğinden faydalanmayan belirli bir sunucu uygulamasına adanmış bir sunucu kullanıyorsanız. Oracle sunucusu, MySQL / MariaDB gibi bazı veritabanı sunucuları, bazı durumlarda, bu veritabanı motorları kendi önbelleklerini kullandığından, takasın 1 ila 10'a düşürülmesini önerir.

Bunun sadece sisteminiz bu göreve adanmışsa ve MySQL / MariaDB durumunda, yalnızca tamamen InnoDB veya XtraDB kullanıyorsanız, MyISAM veya Aria vb. Kullanıyorsanız geçerlidir.


Ayrıntılı açıklamanız için teşekkür ederiz. Benim durumumda (4GB Ram ve 128GB SSD sert) ve benim kullanımımda (Java EE geliştirme ve vitual kutuda birkaç os) swappiness = 20 uygun olduğunu düşünüyorum. Ne düşünüyorsun?
Saeed Zarinfam

Bence 60'ın varsayılanı en iyisi olur bence.
thomasrutter

4
@BlancaHiggins, yorum yaptığınız yazıyı okudunuz mu? Yorumunuz, değişimin aslında ne yaptığını tarif etmiyor.
thomasrutter

1
Bu mükemmel bir cevap. Böyle harika bir açıklama için çok teşekkür ederim.
Dan Barron,

2
Bu SwapFaq'daki bilgilerin bir kısmı bence yanıltıcıdır: 100'e ayarlamanın "agresif" bir şekilde değişmesidir. Bence, çok dikkatli, proaktif bir ayar olduğunu söylemek daha doğrudur, ilk bakışta mevcut hafızanın veya önbellek seviyesinin biraz azaldığını gösteriyor. 10 gibi düşük ayarların daha riskli, heyecan verici bir ayar olmasına rağmen, mevcut bellek çok düşük olana ve önbellek tamamen ortadan kalkıncaya kadar herhangi bir takas yapmamaktan kaçının, sistemi çok sıkışık bir odaya bırakmadan bırakın.
thomasrutter

14

Normal bir masaüstünde, hafızanın% 50-60'ını tüketen 4-5 aktif görev vardır. Değişkenliği 60 olarak ayarlarsanız, AKTİF görev sayfalarının yaklaşık 1 / 4-1 / 3'ü değiştirilir. Bu, her görev değişikliği için, açtığınız her yeni sekme için, her JS çalıştırması için bir takas işlemi olacağı anlamına gelir.

Çözüm, değişmezliği 10'a ayarlamaktır. Pratik gözlemlerle, bu, sistemin okuma / yazma önbelleği neredeyse hiç kullanılmadığı için disk io önbellekten vazgeçmesine neden olur (masaüstünde rol oynaması çok az rol oynar). dosyalar) bir şeyi değiş tokuş etmek yerine. Uygulamada, bu, sistemin% 90'ını kullanılan belleği göstermediği sürece io önbelleği kesmeyi, sayfa değiştirmeyi reddedeceği anlamına gelir. Bu da pürüzsüz, değiştirilebilir, hızlı bir masaüstü deneyimi demektir.

Bununla birlikte, dosya sunucusunda, değişebilirliği 60 ya da daha fazlasına ayarlarım, çünkü sunucu, bellekte bir bütün olarak tutulması gereken büyük aktif ön plan görevlerine sahip değildir, ya çalışan ya da uykuda olan çok daha küçük işlemlere sahiptir. ve durumlarını derhal değiştirmemek. Bunun yerine, sunucu genellikle istemcilere tam olarak aynı verileri sunar, bu nedenle disk önbelleklerini çok daha değerli kılar. Dolayısıyla sunucuda, uyku işlemlerini değiştirmek, disk önbellek istekleri için bellek alanını boşaltmak daha iyidir.

Bununla birlikte, masaüstlerinde, bu kesin ayar, GERÇEK uygulamaların bellek bloklarının değiştirilmesine ve bu verilerin sürekli olarak değiştirilmesine ya da erişilmesine neden olur.

İşin tuhafı, tarayıcılar genellikle sürekli değiştirdikleri büyük miktarlarda bellek ayırır. Bu tür parçalar değiştirildiğinde, geri istenirse biraz zaman alır - ve aynı zamanda, tarayıcı önbelleklerini güncellemeye devam eder. Hangi büyük gecikmelere neden olur. Uygulamada, tek bir sayfanın yüklenmesini beklerken yeni bir sekmede 2 dakika bekleyeceksiniz.

Masaüstü, disk io'yu gerçekten önemsemez, çünkü masaüstü nadiren okur ve büyük miktarda veriyi tekrarlayan önbellekte yazar. Disk değiştirmeyi sadece takas etmeyi önlemek için kesmek, masaüstü için çok daha uygundur,% 30'luk RAM (aktif olarak kullanılan uygulamalara ait bloklarla dolu) takılan disk önbelleği için ayrılan belleğin% 30'unu çıkarmaktan daha uygundur.

Sadece bir ipucu açın, bir tarayıcı açın, GIMP, LibreOffice - orada birkaç belge yükleyin ve birkaç saatliğine göz atın. Gerçekten bu kadar kolay.


3
Sunucu vs masaüstü farkları açıklama için +1. Sunucunun disk önbelleği bir disk alanında yapılabilir.
Dee,

Bu durumda, neden Ubuntu'nun hem sunucu hem de masaüstü sürümleri varsayılan olarak 60'lık bir değiş tokuşa çıkıyor? Eğer belirttiğiniz doğru ise, o zaman masaüstü sürümünün varsayılan olarak 20 veya 10 ile sunulması daha mantıklı olacaktır, ama değildir.
JAB

1
Değiş tokuşun doğrudan değiş tokuş edilen bir yüzdesi olduğu imaına referans? Böyle çalıştığını sanmıyorum.
Xen2050 23.03.2010

1
Öyle değil. Değiş tokuş, RAM yüzdesi ile ilişkili değildir. Belirli bir sorun durumunda takas olasılığının düşük olması ihtimaline karşı bulanık bir algoritma düzenleyen bir topuz. Ayrıca, sunucuya göre masaüstü iş yükleri ve bu cevaptaki açıklamaların her zaman geçerli olmayan varsayımlarda bulunduğunu düşünüyorum.
thomasrutter

9

Linux sisteminizde bir Java sunucusu çalıştırıyorsanız, takas değerini 60'ın varsayılan değerinden daha fazla azaltmayı düşünmelisiniz. Yani 20 gerçekten iyi bir başlangıç. Değişim bir çöp toplama işlemi için bir katildir, çünkü koleksiyonların her zaman işlem belleğinin büyük kısımlarına dokunması gerekir. İşletim sistemi, bu tür süreçleri tespit etmek ve kendileri için doğru olanı elde etmek için araçlara sahip değildir. Verimli uygulama sunucuları için elinizden geldiğince değişmekten kaçınmak en iyi yöntemdir.


Bir sunucuyu, bildiğiniz özel bir iş yüküne adadığınızda, sistem önbelleğinden (veritabanı sunucusu gibi) faydalanamayacağı doğrudur. Çöp toplamanın yeterince uzmanlaşmış bir durum olduğunu sanmıyorum. Belleğe sık sık dokunulursa değiştirilmez, fiziksel RAM'de tutulur. Bu tek durum böyle değil, eğer ciddi bir düşük bellek durumunuz varsa - ve değiştirme sizin sorumluluğunuzda değildir.
thomasrutter

4

Makinenizin ne kadar yük altında olduğunu görmek için sistem monitörünü açık tutarken bazı deneyler yapmanızı öneririm, ayrıca 4 GB bellek ve 128 GB SSD ile de çalışıyorum, bu yüzden swappiness değerini 10 olarak değiştirdim; Bonus, SSD sürücüsünün ömrünü de uzatacak, çünkü daha az yazı çekecek.

Bunu tam bir açıklama ile nasıl yapacağınızla ilgili basit bir video öğretici için aşağıdaki YouTube videosuna bakın

http://youtu.be/i6WihsFKJ7Q


1
Yaptığınız harika video, ancak video soruyu doğrudan yanıtlamıyor, değişimin değişmesiyle ilgili bir nasıl daha çok.
jmunsch

SSD ömrü ipucu için +1, sistem mümkün olduğu kadar salt okunursa, kalanı bellekte kalmalı ve bugün, mevcut masaüstü bilgisayarlarda bellek genellikle büyük bir sorun değil, SSD için en iyisidir.
Dee,

3

2017 teknolojisine daha fazla arka plan kazandırmak için Büyük Veri Performansı mühendisinden bir bakış açısı eklemek istiyorum.

Kişisel deneyimim, sistemlerimin en yüksek hızda çalıştığını garanti etmek için genellikle değiştirmeyi devre dışı bırakmamdan, belirli bir sorun için iş istasyonumda, 1 ile 10 arasındaki değişimin donmaya (sonsuza kadar) ve uzun duraklamalara neden olduğunu buldum. Bu özel uygulama için 80'in yer değiştirmesi, varsayılana göre çok daha iyi performans ve daha kısa duraklamalara yol açmaktadır (60). 1 HDD destekli 8 GB RAM ve 4x 256 GB takas seçeneğim olduğunu unutmayın. Normalde kriterlerimde görülen donanım istatistiklerini ve tüm donanım özelliklerini belirtirdim, ancak henüz bir şey yapmadım ve burada önemli olmayan yeni bir masaüstü bilgisayar.

Eski şirketime dönersek, Spark sunucularında [500GB - 4TB] x [10-100] düğümleri ile değiştirilememiş olmamızın nedeni, veri performansını ve veri yapılarını daha verimli bir şekilde yeniden tasarlamak için bir işaret olarak düşük performans göstermemizdi. tavır. Ayrıca HDD’leri / SSD’leri kıyaslamak istemedik. Ayrıca, bu kadar RAM'in değiştirilmesi, disk erişim süresini en aza indirgemek için, paralel yazma işlemiyle düğüm başına 10-30 diske ihtiyaç duyacaktır.

Bugün, 20 yıl önce ve gelecekte 20 yıl boyunca, vaka hala RAM için bazı sorunların çok büyük olacağı yönünde kalacaktır. Sonsuz zaman ve para ile daha fazla donanım satın alabilir / kiralayabilir ya da performansı arzulanan bir seviyeye getirmek için herhangi bir işlemi yeniden tasarlayabiliriz. Değiş tokuş etmek, asıl sorunu gözardı etmemize izin vermek için bir hack. (Yeterince koçumuz yok ve daha fazla para harcamak istemiyoruz).

Yüksek takasın kötü bir tavsiye olduğunu düşünenler için, işte küçük bir bakış açısı. Geçmişte, HD'lerde varsa birkaç kb önbellek vardı. Arayüz IDE / Paralel ATA idi. CPU veriyolu RAM ve diğer pek çok şey ile birlikte daha yavaştı. Kısacası, sistemler her şekilde çok yavaş (bugüne göre). Birkaç yıl önce, HDD'ler SATA3 kullandı. Bugün, önemli gecikme süreleri olan NVMe protokolünü kullanıyorlar. HD'lerde birçok MB önbellek bulunur. Ve en ilginç kısım, takas deponuz olarak NVMe veya PCIe ile birlikte modern bir SSD (çok daha kararlı okuma / yazma dayanıklılığı ve perf) kullanmanızdır. Maliyet ve performans arasındaki en iyi uzlaşmadır. Lütfen bunu ucuz veya eski SSD'lerle denemeyin.

Takas + SSD'ler! Yüksek performanslı geçici depolama ile, yüksek bir takas değeriyle deneme yapmanızı şiddetle tavsiye ederim. Esas olarak, bellek bantları zaten doymuşsa, bellek kullanım düzenlerine (nadiren çoğu zaman erişen rakip belleğe rastgele erişen), bellek kullanımına ve gerçek çökme maliyetine bağlıdır.


1

Başlangıçta veya açılış programlarında algılanan takas davranışının birçoğunun diskten konfigürasyon dosyalarını vb. Okumak linux olduğu olabilir. Bu nedenle, sabit sürücü erişiminin değişme nedeniyle olduğunu varsaymadan önce sistem izleme programını kullanmaya bakmak en iyisi olabilir.

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.