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?
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?
Yanıtlar:
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.
Ç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.
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.
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:
Uygulamam için hafızamı ayarlamanın en iyi yolu nedir
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
Ç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.
"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 .
Mevcut CentOS Swap önerileri aşağıdaki formülü kullanır:
M = Amount of RAM in GB, and S = Amount of swap in GB, then
If M < 2
S = M *2
Else
S = M + 2
Yani 16G için takas miktarı 18G olmalıdır.
Bkz. Http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-swapspace.html
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)
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
dd if=/dev/zero of=swap.file bs=1024 count=1048576; mkswap swap.file; swapon swap.file