Windows 2008 bellek dolmadan neden takas kullanıyor?


9

IIS ve .NET4 Web uygulamasını çalıştıran bir Windows 2008 sunucusunu (Amazon EC2'de) yönetiyorum. Geçen gün bir bellek uyarısı aldım ve gittim ve baktım ve işlem belleğinin bir tür yavaş sızıntıyla zamanla büyüdüğünden eminim. Çok fazla büyümedi, tıpkı 60M ila 200M gibi, ancak monitörü başlatmak için oldukça düşük eşiğimizi (% 75) aştığı kutuyla yeteri kadar devam ediyordu.

Uygulamanın havuzunu geri dönüştürdüm ve bellek boşaldı ve takas alanının önemli ölçüde kullanıldığını ve 1 GB'den daha fazlasının bu geri dönüşümle serbest bırakıldığını gösteren istatistikleri inceledikten sonra fark ettim.

Belki de bu temel bir soru, ama ben UNIX'im ve hafızanız bitene kadar alışmamaya alışkınım. Bu kutu hiçbir zaman% 75 bellek kullanımının üzerine çıkmamıştır. Bu bir Windows veya .NET veya Amazon bir şey mi? Bu uygulamada şüphelenilenden çok daha büyük bir bellek sızıntısı olduğundan şüpheleniyorum - 60M'den 200M'ye sızmıyor, 60M'den 1.2GB'a sızıyor, ancak bunların çoğu bir şekilde "soğuk" gidiyor ve takas etmek için dışarı itiliyor?

Uygulama havuzunda ayarlanmış bellek geri dönüşümü var, ancak kutunun tam belleğini tetikliyor, bu yüzden bu uygulama otomatik olarak geri dönmeden önce gerçekten çok büyük olabilir.

Düzenli "zamanlanmış" geri dönüşüm ayarlayabilirdim, ancak bu bir geçici çözüm, uygulamayı düzeltmek için geliştiriciyi alacağım, ancak bu hakkı anladığımdan emin olmak için takas kullanımı ile burada neler olduğunu anlamanız gerekiyor.

Daha fazla bilgi ile düzenleme: örnek bellek: 1,7 GB takas: 4,5 GB

Bellek: 211.000k olduğunu gösteren taskmgr içinde w3wp.exe işlemini görüyorum. Ancak yeniden başlattığımda (kendi uygulama havuzunda ve kutudaki tek uygulama), bellek kullanımı 60M normal başlangıç ​​noktasına düştü ve 1 GB + takas da serbest kaldı. Taskmgr'da her zamanki Bellek (Özel Çalışma Kümesi) stat'ımı artırdım, ancak diğer izleme (Cloudkick) aracılığıyla takas değişikliğini gördüm. Geri dönüp bugün baktığımızda, bellek süreçte 195M'ye kadar (toplam 1.2 GB) geri döndü ve takas 1.0 GB'dan 1.1 GB'a kadar sürdü, olduğu yere kadar geri dönmedi (zaman içinde grafik, bir yavaş sürünme).

Bu belirli uygulama hakkında daha az endişeliyim ve sadece Windows'un ne zaman değiştiğini ve bunu nasıl kullandığını ve verilen Windows belleği ve genel olarak takas kullanımı hakkında neyin endişe duyduğunu anlama konusunda daha fazla endişeliyim.


4
BTW, en azından Linux , uzun bir süre erişilmediyse, sistem kullanılabilir tüm RAM'i kullanmaya yakın olmasa bile sayfaları fırsat olarak değiştirecektir. Bunu, disk önbelleği, arabellekler vb. İçin belleği boşaltmak için yapar
EEAA

Bu örnekte ne kadar bellek var? W3wp.exe işleminin 1GB'ye çarptığını mı söylüyorsunuz? Bu uygulama havuzunda çalışan tek site bu mu?
Kev

@ KevΩ İsteğiniz üzerine Q'ya daha fazla bilgi eklendi.
Ernest Mueller

@ErikA, bilmek güzel, sanırım "Eğer takas ediyorsanız zaten bok performansınız var, sadece takasınızı kapatın ve RAM'iniz tükenmez" diyen adamları dinledim. t Takas o kadar çok.
Ernest Mueller

Diskiniz diske atıyorsa, bu doğrudur. Değiştirirse, tamponlar ve benzeri için yer açar.
Bart Silverstrim

Yanıtlar:


17

Windows ve linux'un iki farklı sayfa / takas stratejisi vardır.

Linux

Linux takas alanı kullanmaktan kaçınmak ister ve mümkün olan en son ana kadar bekler. Linux'ta büyük miktarda takas görürseniz, sisteminiz büyük olasılıkla sorun yaşamaktadır. Bu strateji, sisteminizin en yavaş kısmı olan genel disk i / o'yu en aza indirmek için iyidir, ancak değişen hafif ve ağır yük dönemlerine sahip sistemler için daha zayıftır (ve dürüst olmak gerekirse, bu çoğumuzdur). Yükünüzün zaten ağır olduğu zamanlar artık "ekstra" disk i / o tarafından yüklenecek ya da başka bir deyişle, sunucu yapılarınızı, çalışırken bile takas etmeyeceğiniz yeterli koza sahip olacak şekilde tasarlamanız gerekir. beklenen en yüksek yükleme süreleri.

pencereler

Windows, belleği yalnızca sayfa dosyasının önbelleği olarak değerlendirmek istemektedir. Sizin gerçek bellek diskte her zaman, ama öncelikle eğer "cache" dan okuma / yazma olacaktır. Bu strateji, yükünüzü zamanla akşam geçirmek için iyidir; sistem meşgul olduğunda ve sayfaları değiştirmesi gerektiğinde, geçerli sayfa zaten disk üzerindedir ve işin yarısı zaten yapılır. Bu yaklaşım, Windows gençken, 32MB (GB'yi unut) hala çok RAM'di ve sık sık takas alanı kullanma ihtiyacı verildi. Bugün bile bu, hafif ve meşgul yükler arasında değişen iş yükleri için iyidir, çünkü disk g / Ç'nin zamanla daha eşit bir şekilde yayılmasına yardımcı olur.

Modern Windows sürümleri, bir programı ilk kez yüklerken fazladan disk yazma ihtiyacını ortadan kaldırmak için, diskte ve RAM'de bellek sayfalarını önceden yüklemek ve hazırlamak için SuperFetch gibi ek optimizasyonlara sahiptir. Tüm bunlar, sisteminizi yalnızca beklenen en yüksek yükten daha az bir şey için yeterli RAM'e ihtiyaç duyacağınız şekilde tasarlayabileceğiniz anlamına gelir, böylece düşük maliyetlerle her zaman en azından kabul edilebilir performansa sahip olabilirsiniz.

yakınsama

Öncelikle bir test ortamında yükü ölçme veya tahmin etme ve daha sonra yük bilindiğinde üretim kaynaklarını tahsis etme kavramı, sanal ve daha sonra bulut sunucularının ortaya çıkmasıyla sistem yapısında nispeten yeni bir gelişme, mümkün veya en azından pratik bir gelişmedir. . Yükünüze bağlı olarak, sistemi hiçbir zaman takas yapmaya gerek kalmayacak şekilde tasarlayabilirsiniz. Bu durumlarda, Windows disk belleği kapatmanıza ve bir linux sistemi gibi davranmanıza izin verir. Ancak, dikkatli olmalısınız; sistem tasarımınız beklenenden daha fazla bellek gerektiriyorsa kendinizi bu şekilde başınız belaya sokabilirsiniz.

Öte yandan, modern linux çekirdekleri diske fırsatçı olarak eskisinden daha fazla takas etmeye isteklidir. Bu nedenle, iki sistem arasındaki bellek yönetimi stratejilerindeki fark hala mevcut, ancak şimdi eskisinden daha az farklı. Her iki sistemin de avantajları vardır ve her biri hangi ilerlemeleri kopyalayabileceklerini görmek için diğerini izler.


Windows son stratejisine çok özel, teşekkürler! Ayrıca bu Microsoft KB tarafından doğrulandı buldum ... support.microsoft.com/kb/2267427
Ernest Mueller

1
Açıkça vm.swappiness = 0 ayarlamadığınız sürece Linux mümkün olan en son anı beklemek zorunda değildir. Varsayılan değer olan 60'ta, bir süre dokunulmamış sayfaları değiştirir.
Kjetil Joergensen

@KjetilJoergensen yakınsama ile ilgili son bölümü okuduğunuzdan emin olun.
Joel Coel

1
@JoelCoel Eleştirilerimi koşulsuz olarak geri çekiyorum :)
Kjetil Joergensen

7

Windows (ve Linux ve diğer Unix benzeri işletim sistemleri), aktif G / Ç etkinliğini hızlandırmak için arabelleklere ve önbelleğe yer açmak için bir süredir kullanılmayan sayfaları diske taşıyacaktır. Ayrıca uygulamalar çoğu zaman hemen kullanacaklarından daha fazla bellek ayırır - bu, Çekirdeğin arka planda yakın zamanda dokunulmamış bazı şeyleri sayfalamaya teşvik edebilir, böylece adı geçen uygulamalar aniden başladığında çağrı gecikmesini görmez bu tahsisi kullanarak.

Linux altında, /procdosya sistemindeki ilgili "swappiness" değerlerini değiştirerek bu davranışı değiştirebilir (veya engelleyebilirsiniz) - şüphesiz Windows'un bu konuda nasıl davrandığını değiştirmek için tweak yapabilirsiniz.

Dikkat edilmesi gereken başka bir şey, bir şey disk belleği açıldığında ve daha sonra tekrar okunduğunda, çekirdek başka bir şekilde doluncaya veya RAM'deki sayfa değiştirilene kadar çekirdeği sayfa dosyasından kaldırmayacaktır. Bu şekilde, yeniden yığınlanan sayfalara ihtiyaç duyuyorsa, sayfaları diske yazmak zorunda kalmadan bunu yapabilir: içerik zaten oradadır. Bu, bellek fazla çalışmasının sayfa dosyalarının daraltılmasına neden olacak kadar kötü olduğu durumlarda performansı büyük ölçüde artırabilir (sürekli olarak ve dışarıda önemli sayıda sayfa eşleştirilir). Bazı verilerin bu bellek sızıntısı tarafından dışarı atıldığını ve daha sonra tekrar yer açmak için bu sayfaların eşleştirilmesi veya RAM olması gerektiğinde diskten silinmediğini fark edebilirsiniz. Linux altında, "SwapCached" değeri/proc/meminfoRAM ve diskte aynı kopyaları olan sayfalarda ne kadar veri olduğunu gösterir. Windows şüphesiz aynı optimizasyonu (veya benzer bir şeyi) kullanır, ancak bunun ne kadar olduğunu görmek için tam olarak nereye bakacağımı bilmiyorum (şüphesiz sorgulayabileceğiniz ilgili performans monitör sayaçları vardır).

tl; dr: Bu normaldir. Modern bir OS Çekirdeği akıllı olmaya çalışacak ve G / Ç işlemlerini kaydetmek için önbellek olarak ne kadar RAM kullanabileceğini en üst düzeye çıkaracak ve bazen bu bitleri sayfalamak gerekiyorsa G / Ç'yi kaydetmek için diske ve RAM'e kopyalanan veriler olacaktır. RAM daha sonra. Muhtemelen, sezgisel olduğu gibi, sayfa dosyalarının bu iki şekilde kullanılmasının, şu anda RAM'de düşük olmasanız bile, genel performansınızı azaltmaktan ziyade arttırmasıdır.

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.