it-swarm-tr.com

RAM'de yeterince boş alan olduğunda neden takas kullanılır?

RAM yerine takas alan kullanmak PC'yi yavaşlatabilir olabilir.

Peki neden fazlasıyla yeterli RAM kullanılabilir, Linux sistemim (Arch) takas kullanıyor?

Conky çıktımı aşağıda kontrol edin:

conky output

Ayrıca, karşılaştığım hız ve sistem duyarlılığı sorunlarının nedeni bu olabilir mi?

free -m Çıktısı:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          1257       1004        252          0         51        778
-/+ buffers/cache:        174       1082
Swap:          502        144        357
132
Stefan

Linux sistemlerinin hala RAM boş olsa bile bazı takas kullanması normaldir. Linux çekirdeği çok nadir kullanılan bellek sayfalarını takas etmek için hareket eder (ör. , yalnızca X11 ve başka bir etkin olmayan arka plan programı kullandığınızda getty örnekleri).

Takas alanı kullanımı bir sorun haline gelir yalnızca yeterli olmadığında RAM kullanılabilir, ve çekirdek bellek sayfalarını takas etmek ve RAM'e geri döndürmek için sürekli olarak taşımak zorunda kalır. Bu durumda, sistem monitörü uygulamaları çok fazla disk G/Ç etkinliği gösterir.

Karşılaştırma için, her ikisi de GNOME masaüstü çalıştıran X11 oturumları ile giriş yapan iki kullanıcılı Ubuntu 10.04 sistemim, ~ 600MB takas ve ~ 1GB RAM (arabellek ve fs önbelleğini saymaz) kullanır, bu nedenle Takas kullanımı için rakamlarınızın normal göründüğünü söyleyebilirim.

96
Riccardo Murri

Bu davranış, değeri ayarlanarak yapılandırılabilir:

/proc/sys/vm/swappiness

Varsayılan değer 60'tır. Bunu 0 olarak ayarlamak, hala RAM kaldı ve 100 bellek en kısa zamanda belleği değiştirirken asla takas kullanılmaması anlamına gelir.).

Değeri geçici olarak değiştirmek için (yeniden başlatma sırasında kaybedilir):

Sudo sysctl vm.swappiness=10

Değeri kalıcı olarak değiştirmek için dosyayı düzenleyin:

/etc/sysctl.conf

kök olarak (ör. Sudo nano /etc/sysctl.conf) ve satırı değiştirin veya (yoksa) ekleyin:

vm.swappiness

istediğiniz değere getirin. Bu dosya yoksa (ör. Arch Linux'ta), /etc/sysctl.d/99-sysctl.conf yerine.

Kullanılabilir boş bellekle değiştirmenin iyi veya kötü olup olmadığı konusunda bazı tartışmalar oldu, ancak buntu yardımı gerçekten Masaüstü sistemleri için 10 değerini öneriyor . Ayrıca bkz CentOS için Digital Ocean hakkındaki bu eğitim .

96
Marcel Stimberg

Linux RAM doldurulmadan) değiştirmeye başlar. Bu, performansı ve yanıt verme yeteneğini artırmak için yapılır:

  • Performans artar, çünkü bazen RAM disk önbelleği için program belleğini saklamaktan daha iyidir. Bu nedenle, bir süredir etkin olmayan bir programı değiştirmek ve sık kullanılan dosyaları önbelleği.

  • Bellek dolduğunda ve bazı programların çalıştığı ve bir görevi tamamlamak için daha fazla RAM) istemesi yerine, sistem boştayken sayfaları değiştirerek yanıt verme hızı iyileştirilir.

Değiştirme, sistemi yavaşlatır elbette - ancak değiştirmenin alternatifi değişmez, daha fazla RAM veya daha az RAM kullanır).

Bu eski bir yazı, ancak yine de düşüncelerimi buraya koyma özgürlüğünü ele alacağım.

Alttan başlayarak, Linux önce belleği sayfalara böler (genellikle x86_64 sisteminde sayfa başına 4K). Daha sonra, eşlemesi fiziksel bellekle MMU (Bellek Yönetim Birimi)) kullanılarak yapılan sanal bellek oluşturulur.

İşlemler sanal bellek alanından bellek tahsis edilir, bu nedenle/proc/meminfo öğesini gördüğünüzde sanal bellek ayrıntıları olarak VMalloc * 'u göreceğinizi lütfen unutmayın.

Diyelim ki bellek isteyen bir işleminiz var (300MB - bir web tarayıcısı). İşlem sanal bellekten 300MB olarak tahsis edilir, ancak bellek eşlemesine (fiziksel belleğe eşleştirilir) gerek yoktur. Bellek yönetimi için "Yazarken Kopyala" kavramı vardır, böylece süreçleriniz aslında sanal bellekten ayrılan belleği kullanıyorsa (yani bellekte bir miktar yazma yapar), ancak o zaman fiziksel belleğe eşlenir. Bu, çekirdeğin çok işlemli bir ortamda verimli bir şekilde çalışmasına yardımcı olur.

Önbellek nedir?

İşlemler tarafından kullanılan çok fazla bellek paylaşılır. Diyelim ki glibc kütüphanesi neredeyse tüm süreçler tarafından kullanılıyor. Her işlem aynı bellek konumuna erişip işi yapabildiğinde glibc'nin birden çok kopyasını bellekte tutmanın anlamı nedir? Bu tür sık ​​kullanılan kaynaklar önbellekte tutulur, böylece süreçler talep edildiğinde aynı bellek konumuna yönlendirilebilirler. Bu, glibc (vb.) 'Nin diskten tekrar tekrar okunması zaman alıcı olacağından süreçlerin hızlanmasına yardımcı olur.

Yukarıda belirtilenler, paylaşılan kütüphaneler içindi, dosya okuma için de benzer. Büyük bir dosyayı (100-200MB diyelim) ilk kez okursanız, çok zaman alacaktır. Ancak, aynı okumayı tekrar denediğinizde, daha hızlı olur. Veriler bellekte önbelleğe alındı ​​ve tüm bloklar için yeniden okuma yapılmadı.

Arabellek nedir?

Arabelleğe gelince, bir süreç I/O dosyası yaptığında, diske veri yazmak için çekirdeğin arabelleğine dayanır. Süreçler, çekirdeğin işi yapmasını ister. Böylece, işlem adına, çekirdek verileri "arabelleğine" yazar ve işleme yazma işleminin yapıldığını söyler. Zaman uyumsuz bir şekilde, çekirdek bu verileri arabelleğe diskte senkronize etmeye devam edecektir. Bu şekilde, işlemler verileri diske senkronize etmek için doğru zamanı seçmek için çekirdeğe güveniyor ve işlemler ileride çalışmaya devam edebiliyor. Unutmayın, bu normal süreçlerin yaptığı genel I/O'dur. Ancak, G/Ç'nin gerçekten disk üzerinde yapıldığını doğrulaması gereken özel işlemler, diskte G/Ç yapmak için başka bir mekanizma kullanabilir. Açık kaynak hizmetlerinden bazıları libaio'dur. Ayrıca, işlemler bağlamınızda açılan FD'lere açık eşitlemeyi çağırmanın yolları vardır, böylece çekirdeği, yapmış olabileceğiniz yazma için verileri diske eşitlemeye zorlarsınız.

O zaman sayfa hataları nedir?

İkili yaklaşık 300 MB olan bir işlemi başlattığınızda (örneğin bir web tarayıcısı) bir örnek düşünün. Ancak, tam 300MB web tarayıcısı ikili anında çalışmaya başlamaz. İşlem, kodundaki işlevlerden işlevlere geçmeye devam eder. Daha önce de belirtildiği gibi, Sanal Bellek 300MB tüketilir, ancak hepsi fiziksel belleğe eşlenmez (RSS - yerleşik bellek daha az olur, üst çıkışa bakın). Kod yürütme, belleğin fiziksel olarak eşlenmediği bir noktaya ulaştığında, bir sayfa hatası sorun olur. Çekirdek bu belleği fiziksel olarak eşler, bellek sayfasını işleminizle ilişkilendirir. Böyle bir sayfa hatasına "Küçük Sayfa Hataları" denir. Benzer şekilde, bir işlem dosya I/O yaparken büyük sayfa hataları ortaya çıkar.

Takas Çıkışı ne zaman ve neden olur?

Durum 1:

Yukarıdaki ayrıntılarla aynı doğrultuda, iyi miktarda bellek bellek eşlendiğinde bir senaryo düşünelim. Ve şimdi bellek gerektiren bir süreç başlıyor. Yukarıda tartışıldığı gibi, çekirdek bir miktar bellek eşlemesi yapacaktır. Ancak, yeterli fiziksel RAM belleği eşleştirmek için kullanılabilir. Şimdi, çekirdek önce önbelleğe bakacak, kullanılmayan bazı eski bellek sayfalarına sahip olacak. ayrı bir bölüme (SWAP denir), bazı sayfaları boşaltın ve serbest bırakılan sayfaları yeni istekle eşleştirin.Disk yazma katı hal RAM'inden çok daha yavaş olduğundan, bu işlem çok zaman alır ve bu nedenle görülür.

Durum 2:

Diyelim ki sistemde çok fazla boş bellek var. O zaman bile görüyorsunuz bir sürü takas gerçekleşiyor. Olası bir bellek parçalanması sorunu olabilir. Çekirdekten 50 MB bitişik bellek gerektiren bir işlemi düşünün. (bitişik olarak unutmayın). Açıkçası, çekirdek sayfaları farklı işlemlere rastgele ayıracak ve bazılarını serbest bırakacaktı. Bununla birlikte, bitişik bellek talep ettiğimizde, süreç talebini doyuran bir yığın araması gerekecektir. Böyle bir bellek alamıyorsa, bazı eski bellek sayfalarını değiştirmeli ve sonra bitişik olanları ayırmalıdır. Bu gibi durumlarda bile SWAP çıkışı olur. Kernel ver 2.6 ve üstü ile bu tür parçalanma problemleri önemli ölçüde azalmıştır. Ancak, sistem uzun bir süre çalışıyorsa, bu tür sorunlar hala ortaya çıkabilir.

Bu örneğe bakın ( vmstat çıkışı )

2016-10-29 03:55:32 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
2016-10-29 03:55:32  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2016-10-30 03:56:04 19 23 2914752 4692144 3344908 12162628 1660    1  8803 12701 4336 37487 14  7 40 38  0
2016-10-30 03:56:34  3 20 2889296 4977580 3345316 12026752 2109    2  8445 14665 4656 36294 12  7 46 34  0
2016-10-30 03:57:04  1 11 3418868 4939716 3347804 11536356  586 4744  2547  9535 3086 24450  6  3 59 33  0  <<<-----
2016-10-30 03:57:34  3 19 3456252 5449884 3348400 11489728 3291 13371  6407 17957 2997 22556  6  4 66 24  0
2016-10-30 03:58:04  7  6 4194500 5663580 3349552 10857424 2407 12240  3824 14560 2295 18237  4  2 65 29  0
2016-10-30 03:58:34  2 16 4203036 5986864 3348908 10838492 4601 16639  7219 18808 2575 21563  6  4 60 31  0
2016-10-30 03:59:04  3 14 4205652 6059196 3348760 10821448 6624 1597  9431  4357 1750 20471  6  2 60 31  0
2016-10-30 03:59:34  2 24 4206968 6053160 3348876 10777216 5221 2067 10106  7377 1731 19161  3  3 62 32  0
2016-10-30 04:00:04  0 13 4205172 6005084 3348932 10785896 6236 1609 10330  6264 1739 20348  4  2 67 26  0
2016-10-30 04:00:34  4 11 4206420 5996396 3348976 10770220 6554 1253 10382  4896 1964 42981 10  5 58 27  0
2016-10-30 04:01:04  6  4 4177176 5878852 3348988 10825840 8682  765 10126  2716 1731 32949  8  4 69 19  0

@ 2016-10-30 03:57:04, hala iyi miktarda bedava olduğunu görüyoruz RAM kullanılabilir. Ancak, o zaman bile takas gerçekleşti. Bu noktada süreç ağacını kontrol ettik. ve bu kadar yüksek miktarda bellek gerektiren herhangi bir işlem görmedik (boş bellekten daha fazlası) Açık şüphesi yukarıda açıklanan Durum 2 idi. Yukarıdaki buddyinfo ve zoneinfo günlüklerini kontrol ettik Bunları kontrol etmek için tetikleyici, çıkış syslog'lara gider).

Normal bir sistemimiz için bölge bilgilerinin karşılaştırılması bunu yapar. Önbellek/serbest/düşük mem için grafikler de aşağıda belirtilmiştir

zone info

swap free low free

Bilgiye bakıldığında, düğüm 0 ve düğüm 1 normalde bellek parçalanması olduğu açıktır (Düğüm, NUMA tabanlı bir makinedir, dolayısıyla birden fazla düğümdür (sisteminiz için bilgileri kontrol etmek için numactl'e bakın).

Bellek parçalanması, boş bellek varken bile takas kullanımının artmasının bir nedenidir.

15
Anugraha Sinha

Daha fazla kullanılabilir hafızaya sahip

Herkesin dediği gibi, evet takas kullanılmayan hafızadan kurtulmanıza yardımcı olur, böylece daha fazla hafızaya sahip olmanıza yardımcı olabilir.

Kış uykusuna yatan

Ancak takas, bir dizüstü bilgisayarınız olduğunda veya enerjiden tasarruf etmek ve işten ayrılmadan önce bilgisayarınızı koymak ve hazırda bekletme modunda çalışmak istediğinizde gerçekten yararlı olabilecek hazırda bekletme için de kullanılabilir. Böylece ertesi sabah daha hızlı başlayabilirsiniz.

Bir hazırda bekletme işlevine sahip olmak, günümüzde hala en azından RAM takas boyutu) olmasını önerdiğimiz ana nedenlerden biridir. Bu şekilde sistem, kullanılan tüm RAM takas içine girer ve hazırda bekletme moduna geçer.

Kısa geliş

Değiştirildikten sonra, takas şifrelenmediği sürece (elbette) takastan sonra bir işlem verisinin okunabileceğine dikkat edin.

Hazırda bekletme ile şifreli swap kullanmak, tüm dağıtımlarda hazır değildir. Devam etmeden önce şifrelenmiş birimi etkinleştirmek için sabit bir şifreleme anahtarı (bazı kurulumlar her bir önyüklemede rasgele takas alanı şifreleme anahtarı oluşturur) ve bir initrd/initramfs kullanmanız gerekir.

5
Huygens

Marcel'in bağladığı buntu Swap F.A.Q.

Minimum bir temel olarak, takas alanının fiziksel bellek (RAM) miktarına eşit olması şiddetle önerilir. Ayrıca, takas alanının sabit disk miktarına bağlı olarak fiziksel bellek (RAM) miktarının iki katı olması önerilir.

Sisteminizdeki takas alanınızı artırmanız gerektiğini düşünüyorum. Takas, zaten disk belleği olan verileri atmaya izin vererek RAM bellek ayırmayı hızlandırır.

3
Jader Dias

Birçok modern program, programı çalıştırmak için gerçekten ihtiyacınız olmayan çok fazla önemsiz yere sürüklenen şişirilmiş çerçeveler üzerine inşa edilmiştir. Kullanılmayan bu sayfaların değiştirilmesi RAM önbellek ve RAM'den gerçekten yararlanabilecek programlar için) serbest bırakılır.

Burada acı veren kişisel deneyimlerden söz ediyorum.

Geçen yıl, web sitelerimden birini Firefox'un üzerine inşa edilmiş, umut verici yeni bir web sunucusu çerçevesine geçirdim. Firefox gibi istemci odaklı bir programın üzerine bir sunucu tarafı sistemi oluşturmak garip gelebilir, ancak bazı büyük faydaları vardı. Firefox çok güçlüdür, gerçekten etkileyici dahili hizmetler sunar ve her ikisi de benzer platformları çalıştırmak için sunucu ve istemci arasındaki empedans uyumsuzluğunu azaltır.

Ama bir dezavantajı var: Firefox büyük. Gerçekten büyük. Bu, sürüm 1.x tür bir projeydi, bu yüzden GUI desteğini kaldırmak gibi şeylere uğramamışlardı. [*] Sitemin bunlara ihtiyacı yoktu, ancak barındırma sağlayıcımın kullandığı VPS teknolojisi nedeniyle t Takas alanı, bu GUI kodu ve Firefox'u kullanmadığım diğer tüm bölümleri gerçek RAM yedim. 512 MB RAM minimum sadece bellek tükenmesi nedeniyle çökmeden siteyi çalıştırmak için sona erdi. VPS benim takas alanı olsaydı, muhtemelen kazanmış olabilir 256 MB'lık bir plan ile.

[*] GUI kodunun çerçeveden kaldırılması bile istenmeyebilir, çünkü bu platformun avantajlarından biri yüksek doğrulukta web kazımadır, çünkü sunucu tarafı çerçevesi web sayfalarını başka bir siteden indirebilir ve bunları sizin gibi değiştirebilirsiniz. müşteri tarafında olur. Karıştırmayı düşünün. Web sayfasını bir grafik bağlamda "oluşturamazsanız" bu tür şeylerin çoğu kırılır.

Bu arada, bu web çerçevesi aslında öldü, bu yüzden hiçbir isim ve taklit edici nokta yok. Daha geniş bir dersi yürekten almak en iyisidir: evet, ücretsiz RAM konserleriniz olsa bile takas hala yararlıdır.

3
Warren Young

Bence "Gilles" zaten yeterli RAM fazla olsa da, takas bazı "eksiklikler" sırasında yararlı olabilir yanı sıra kapatma sonra bile bazı verileri kalıcı olarak kaydetme - ya da varsayarak yanlış mı? beri RAM yeniden başlatmalardan sonra kızartılır) 12GB RAM sistemimde kullanılabilir ve ben de bu soru hakkında daha önce düşündüm. nokta, tüm takas devre dışı bırakmış ve sadece RAM benim güveniyordu, ben sistem kapatmaları sonra bazı sistem hatası veya çökme, vb hata ayıklama çalışırken acı zor deneyimler vardı.O zamandan beri, takas bölümünü yeniden etkinleştirdim.

2
ILMostro_7