CentOS 16GB RAM için ne kadar SWAP?


11

Bir mysql arka uç - orta / ağır yük ile bir php web sitesi çalıştıracak 16 GB RAM ile çift Dört Çekirdekli XEON bir CentOS yükleme ne kadar SWAP verecek?

centos  swap 

Yanıtlar:


20

Bir veya iki konserden fazla değil - her ihtimale karşı biraz takas istersiniz ve işlerin biraz daha iyi çalışmasına yardımcı olduğu için, ancak çok fazla takas yaptığınız noktaya gelirseniz, makine gidiyor işe yaramaz olmak - ve gerçek bir felaket durumunda, aslında daha küçük bir takas alanı ile daha iyi durumdasınızdır, çünkü o zaman OOM katilini daha sonra değil, daha erken tetiklersiniz.


7
Ayrıca, biraz yer açıp yeni bir birim oluşturarak (LVM kullanıyorsanız) veya bir dosyayı benzer bir şeyle takas olarak kullanarak gerekirse daha sonra her zaman daha fazla takas alanı ekleyebileceğinizi unutmayındd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file
David Spillett

3
Yan not olarak, / proc / sys / vm / swappiness değerini ayarlayarak değiştirme derecesini kontrol edebilirsiniz.
David

2
Burada birkaç noktaya katılmam gerekecek. . . İlk olarak, disk ucuzdur, ona birkaç GB atabilirsiniz. İkincisi, şanssız kalırsanız OOM katili tüm kutunuzu aşağı alabilir. Herhangi bir şekilde ona güvenmek veya OOM katilini tetiklemeyi daha iyi düşünmek Çok Kötü Bir Fikirdir. Potansiyel olarak barındırılan bir kutunun potansiyel bir yavaşlamadan daha iyi olduğunu düşünmek de kötü bir fikirdir. Makul olacak tek zaman, bu durum etrafında planlanmış çok özel bir kurulumunuz olmasıydı.
Christopher Cashell

yan not, genel olarak takasları önlemek ve önyükleme işlemini basitleştirmek için bir dosyaya değil, bir bölüme takas ayarlanması tercih edilir. ancak bir dosya kullanmak işe yarayacaktır. 4GB herhangi bir sistemin ihtiyacı olan tek şey, 16GB RAM ile çok fazla takas alacağınızdan şüpheliyim
Silverfire

Aslında Andrew Morton'a göre, performans bir takas dosyası
Journeyman Geek

8

Çok uzun cevap için özür dilerim. Bu eşyaları bir süredir erişilebilir bir yere koymak istiyordum!

TLDR; Teorik olarak, cevap "muhtemelen tüm uygulamalarınızın kullanmak istediği toplam yerleşik bellek miktarından daha az olmayacaktır" olacaktır.

Benimle kalırsan açıklamaya çalışacağım ..

Sanal bellek hakkında biraz

Bu günlerde takas değerinin ne olduğu ve amacının ne olduğu konusunda ortak bir yanlış anlama olduğunu hissediyorum. Sıklıkla, bellek azaldığında bellek takasının bir 'yedek banka' anlamına geldiği düşünülür. Evet, bu kısmen doğrudur, ancak çekirdek takasınızı yedek banka olarak kullanmak istemez . Ayrıca çekirdek asla peşinde olduğunuz verileri almak için diski çağırmak istemez!

Uygulama alanında, çekirdeğin hafızasında tutacağı birkaç şey vardır.

  • Eşlenen dosya verileri.
  • tmpfs dosya sistemleri.
  • Çalışma zamanında ayrılan ham uygulama belleği.
  • Uygulama kodu (ELF formatlarının veri segmentindeki öğeler gibi)
  • Özel olarak mmaped dosya verileri.

Bellek yönetimi amacıyla bellek tahsisi, destekleyici bir cihaz tarafından bir şekilde veya başka bir şekilde desteklenir.

Dosya destekli bellek, bir dosyadan gelen bellektir ve tipik bir O / S, sistemdeki bellek tahsisinin büyük çoğunluğunu oluşturur. Yüklenen paylaşılan kütüphaneler, diskten okunan ve sayfa önbelleğinde depolanan dosyalar ve diskten mmaped dosyalar (aslında, çekirdek, sayfa önbelleğindeki dosyalar ile esas olarak mmapped dosyalar arasında sayfa ayrımı yapmaz) aynı şey).

Çekirdek açısından bu bellekle ilgili en iyi şey tek kullanımlıktır, yani başka bir şey için belleğe ihtiyacınız varsa bu sayfaları dökmek mümkün olmalıdır ve bellek aniden bir gereklilikse sayfa önbelleğinin yaptığı tam olarak budur.

Anonim olarak desteklenen bellek farklı bir konudur. Bu bölgedeki bellek anonimdir, çünkü diskte bu verileri içeren bir dosya yoktur. Bu normalde uygulama yığını, yığın, tmpfs ve mmapped verilerindeki özel ve değiştirilmiş herhangi bir şeyden oluşur (çünkü bu şeyleri diske senkronize edemez). Dosya sisteminde bu sayfaları değiştirildiklerinde yeniden yazmak için geçerli bir dosya olmadığından, anonim olarak yedeklenen bellek takas ortamı tarafından desteklenir.

Şimdi, çekirdek, bellek kıt olduğunda, anonim olarak eşlenen hafızanın dosya destekli hafızasını atmak için çok daha ucuz olduğunu biliyor, çünkü anonim verilerin dosya destekli verilerden "kirli" olma şansı çok fazla, aslında varsayılan olarak çekirdek anonim olarak desteklenen belleği dosya destekli bellekten 80 kat daha değerli olarak değerlendirir ve bu aslında linux üzerinde swappiness değiştiricisinin yaptığı şeydir ( swappiness parametresinin tam olarak ne değiştirdiğini bilmek istiyorsanız bu yazıyı buraya bakın ).

En kötü senaryo

Kontrolden çıkan bir sunucu söz konusu olduğunda ve OOMing söz konusu olduğunda en kötü senaryo, G / Ç isteklerini işlemek için bellek ayırma isteklerini yerine getirmekten çok fazla zaman harcamasına dayanır. Bu kriterleri çağırabilen iki koşul vardır.

  • İstenilen sayfaları almak için anonim belleği her zaman takas etmek veya bir uygulama için daha fazla sayfa ayırmak.
  • CPU zaman isteyen işlemleri yürütmek için verdiğiniz bellekte olmadığı için diskten veri almak için çok fazla zaman harcamak.

Birincisi, genel olarak problem düşüncesidir. Yani, belleğin çoğu takasın içinde yaşadığından, anonim belleği RAM'den değiştirmesi, takas haline getirmesi, sonra takastan bir şey alması ve gerçek RAM'e koyması gerekir. Bu işlem çok pahalıdır, makineyi kurtarılamaz bir duruma gelebileceği noktaya kadar yavaşlatır (sayfa talepleri için G / Ç'den sunulabilecek olandan daha fazla şey kuyruğa girdiğinden).

İkincisi daha az dikkate alınır, ancak aynı derecede önemlidir. Neredeyse tüm belleğinizi gerçek uygulama verilerine ayırırsanız - uzun süre dayanmazsınız. Hemen hemen her uygulama, dosya sisteminin çalışması için dosyaları okumaya dayanır; bunun nedeni, bazı talimatların paylaşılan bir kütüphanede yaşıyor olması veya bir kütüphane çağrısı için /etc/resolv.conf dosyasını okumanız veya başka bir amaç olması olabilir. Bir işletim sistemini durdurmak tamamen mantıklıdır - ancak tüm uygulamalarınıza uyacak kadar belleğe sahiptir, ancak bu kadar çok G / Ç isteğinizin kuyruğa girmesinden hiçbir şeyin düzgün bir şekilde tamamlanma şansı yoktur.

Çekirdeğin takasınızla ne yapmak istediği

Çekirdek, bellek kaybeden sayfalardan kurtulmak için takasınızı kullanmak istiyor, böylece bu belleği başka bir şey için kullanabiliyor.

Temel olarak, normal işlemde, çekirdek sayfa önbelleğini diskten okunan verilerle agresif bir şekilde doldurmayı sever, bu da aynı veri için diski okumaz demektir. Bu iyi bir tasarımdır ve G / Ç'yi büyük ölçüde azaltabilir. Şimdi, 3 gün boyunca uyuyan, uyanan, bir sürü iş yapan ve daha sonra 3 gün daha uyuyan bazı uygulamalarınız olabilir.

Çekirdeğin bu verilerle ne yapmak istediği, bunun yerine dosya sistemi etkinliği için yer açmak için değiştirilir, çünkü bu sayfaları uygulamanız için kullandığınız sayfalardan daha sık kullanma şansınız daha yüksektir. Bu anlamda, takas pek hissetmelisiniz takas medyaya bir 16kb işlem olabilir, ama karşılığında bellek 16kb kadar serbest olabilir olabilir verilerin dört dosya değerinde saklamak için kullanılabilir.

Çekirdek takas kullanmak istemediğinde

Çekirdek kesinlikle başka bir anonim belleği değiştirerek daha fazla anonim bellek ayırmak için takas kullanmak istemiyor, bu insanların en çok ve haklı olarak endişe durumudur.

Ancak, eğer çekirdeğin başka seçeneği olmadığı kadar çok bellek ayırdıysanız, bu, çekirdeğin kendisi değil, sistem yöneticilerinin bir yapılandırma sorunu olduğunu belirtmeliyim. verdiğiniz seçenekler!

Çok fazla takasınız varsa, kullanma şansınızı artırıyor musunuz?

Hayır! 1G ram ve 4G takasınız varsa, verilerinizin değişme şansı% 80 değildir! Çekirdek, yalnızca bellekteki sayfalara başka bir şey yaparak daha iyi hizmet verilebildiğinde kullanmak istiyor!

Takas kullanmamanın avantajı var mı

Bunu asla yapmam. Değiştirme, O / S'nin ihtiyacınız olan bellekten kurtulmasını sağlar, ancak asla kullanılmaz. Eğer takasınız yoksa, sadece yutmayacak hafızanızı asla geri alamayacaksınız, bunun yerine sayfa önbelleğinin yerine sahip olmasına izin vererek önemli bir performans artışı görebilirsiniz.

Sahip olmak için en iyi takas nedir

Teorik olarak, belleği yığıntan ayırmak zorunda kalan kütüphane çağrıları gibi emtialar için% + 20 yerleşik belleğin ne olduğunu bulun - sonra takasınızı bu miktara ayarlayın. Bu (teorik olarak zaten), işletim sisteminin tüm anonim belleği daha yararlı bir şeye yol açması gerektiğinde değiştirmesine izin verecektir.

Çekirdek için tehlikeli olan herşeyi değiştirme fırsatım olursa doğru değil mi?

Unutmayın, çekirdek burada daha anonim bellek tahsisi yapmak için takas etmek istemiyor, sadece alanı yerine daha iyi kullanacak başka bir şey lehine kullanılmayan sayfaları değiştirir.

Takas anon belleğinizi yalnızca daha anonim bellekten ayırmak için çıkarırsanız, yanlış bir şey yapıyorsunuz ve daha fazla RAM'e ihtiyacınız var veya yine de uygulama yığınınızı yeniden ayarlamak için.

Ne kadar RAM gerekir

Elbette tüm uygulamalarınızı çalıştırmak için yeterli RAM'e izin vermeniz gerekir, ancak pagecache'nin doldurması için muhtemelen 2G RAM'e izin vermelisiniz - belki daha fazla. Sayfa önbelleği bilgisayarınızı çok daha hızlı hale getirir ve diskleriniz daha uzun süre dayanır. Bir web sunucusu çalıştırmayı düşünüyorsanız, pagecache için daha fazlasına sahip olmak, sunulabilecek pagecache'den alabileceğiniz ve yeniden kullanabileceğiniz çok fazla statik içerik nedeniyle iyi bir fikirdir (web sunucusu veriminiz 5mb / s ise, gerçekten sonuçta diskinizden oluşturduğunuz 5mb / s içeriği almak istiyorum!).

Linux'a düzgün bir şekilde takas etmek için gerçekten güvenmiyorsanız ne yapmalısınız?

Gerçekten endişeniz varsa, sahip olduğunuzdan daha fazla bellek ayırabilirsiniz:

  • Takas miktarınızı RAM'den daha fazla olmayacak şekilde ayarlayın
  • / Proc / sys / vm / overcommit_memory öğesini 2 olarak ayarlayın
  • / Proc / sys / vm / overcommit_ratio değerini, fiziksel RAM sınırlarını asla aşmayacak bir değer olarak ayarlayın. Bu numaranın size ne olacağını öğrenmek için çekirdek belgelerine bakın .

Uygulamam için hafızamı ayarlamanın en iyi yolu nedir

  • Swappiness'in gerçekte ne yaptığını anlayın.
  • Uygulama başına doğru kaynakları ayırmak için CGroups kullanın.
  • İşletim sisteminin katı sınırları zorlaması için yukarıda belirtilen aşırı taahhüt modunu değiştirin.
  • Kullanım cgroups uygulamalarda ayarlanan OOM priorites yukarıdaki gibi gerçekten sizin dışarı bellek ve uygulama eğer tutmak istediğiniz gerçekten senin dışarı bellek ise hendek istiyorum.

Satıcı farklı bir yapılandırma önerir ..

Bunun yerine dinleyin. Bazı uygulamalar, çekirdeğinin sayfalarının tüm diğerleri üzerinde etkin olmasını kasten çağıracak şekilde yazılır. Bu dürüst olmak için kötü bir hile ama çekirdek olduğunda bellek sorunsuz bir şekilde yönetme yeteneğini kırıyor. Tedarikçiniz size bilgi veriyorsa, muhtemelen bu kategoriye girer ve bunun yerine söylediklerini dinlerler.

Özetle

  • Takas, boşa giden belleği koymak için bir yer olarak kullanılmak içindir. 'Yedek bellek' olarak değil
  • Çok miktarda takasın kullanılması, onu kullanma şansınız üzerinde hiçbir etkiye sahip değildir.
  • Çekirdek, verileriniz için diske erişmenizi durdurmak istiyor. Bu, tıpkı alan takasında olduğu gibi sayfa önbelleğine daha eşit değilse uygulanıyor.
  • Çekirdek, çalıştırdığınız uygulamalara verdiğiniz ayarı onurlandırmak için elinden geleni yapacaktır. Ama eğer 500 apache çocuğunuz varsa hepsi 32M bellek alan OOM eğer şaşırmayın. Bu, bellek yönetiminde değil, seçtiğiniz yapılandırmada bir hatadır.

Çekirdek genellikle sanal belleği düzgün bir şekilde yönetmek için çok iyi bir iş çıkarır. Neredeyse her zaman uygulamanız muhtemelen çalışmayı umduğunuzdan daha fazla bellek ayırıyor ve bir OOM'a neden olan şey bu.

Takas eskiden 'yedek bellek' olarak kullanılırdı, ancak artık asıl amacı değil, bu yüzden böyle kullanmayı düşünmeyin. Bunun yerine, çekirdeğinizin hafızanızı ne için kullanmak istediğini muhtemelen en iyi bildiğini takdir edin. Bu kararları alması için yer açın ve genel performans iyileştirmesinden yararlanın.


2

"Red Hat® Enterprise Linux® 5 Dağıtım Önerileri üzerinde Oracle 10g Server" belgesinden.

Oracle, MetaLink Note 169706.1'deki takasın büyüklüğü hakkında genel öneriler sunar. Bu öneriler, büyük miktarda belleğe sahip sistemlerde çok fazla takas alanı oluşturulmasına neden olabilir. Çok büyük takas sistem performansının düşmesine neden olabilir ve takas alanı azaltılarak çözülebilir. Red Hat, Red Hat Enterprise Linux 5 üzerinde takas için 4GB'den daha fazla bellek ayırmayı önermez.

Yani 16GB için 4GB'tan fazla takasınız olmamalıdır.

PS. Ayrıca oom, tüm G / Ç bant genişliğini kullanan, kullanılmayan takas işleminden neredeyse her zaman daha iyi olduğunu belirtmek gerekir .



-1

Linux belgelerinden hatırladıklarımdan: Koçunuz 2GB'dan büyükse, takas = (ramSize + 2) yaparsınız. Eğer daha azsa takas = (ramSize * 2)


-2

Bu belgeyi sizin için buldum, bu kararı vermenize yardımcı olmalı, işte burada: Takas Alanı nedir? , ancak yukarıdaki cevapların hiçbiri doğru değil


1
Bağlantı kurduğunuz belge kendisi ile aynı fikirde değil. "Daha fazla 2GB RAM miktarı 2Gb üzerindeki RAM" belirtilen kuralın ardından, 5Gb değil 3Gb RAM (3-2 = 1) için 1Gb takas verecektir.
David Spillett
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.