Bellek her gün yaklaşık aynı anda aniden serbest bırakılıyor


10

Windows Azure'da e-ticaret web sitemizi çalıştıran birkaç sanal makinem var ve son zamanlarda bu makinelere göz kulak olmak için Telegraf, InfluxDb ve Grafana'yı kullanmaya başladık. Birkaç hafta veri topladıktan sonra, Kullanılabilir Hafıza metriğiyle ilgili garip bir desen fark ettim :

Her gün neredeyse her zaman günün aynı döneminde, çok çok sınırlı DevOp becerilerim nedeniyle, buna neyin neden olduğunu anlayamadığım ani bir miktar boş bellek olduğunu fark ettim.

İşte bu kalıbı gösteren bir grafik:

Garip desen

Sorum şu: Böyle bir şeye ne yol açabilir? Bir Bellek Sızıntısının suçlanacağından şüpheleniyorum ama ... Boş bellek hiçbir zaman% 70'in altına düşmüyor ve sadece en fazla trafiğe sahip VM'lerin ikisinde oluyor!

Böyle bir şey gördüğümde endişelenmeli miyim?

Not: Çalıştığımız her Windows hizmeti ve w3wp işlemi için Özel e Sanal bayt metriklerini toplamaya başladım ... Bu metriklerin bir bellek sızıntısı olup olmadığını öğrenmek için çok güvenilir olmadığını okudum, ama en azından bir çeşit trend elde etmeye çalışacağım ve bunun yukarıda gösterilen modelle ilişkili olup olmadığını göreceğim.


2
Normal bir çöp toplayıcı veya önbellek temizliği IMHO'yu görüyorsunuz. Web siteniz hangi dilde yapılıyor? (bu, uygulamanız, webseveriniz ve hatta bazı temizlik işlemleri yapabilir)
Tensibai

Bu da şüphelendiğim bir şeydi ... ASP.NET MVC 4'te yapıldı, bu yüzden çöp toplama teorisi bir anlam ifade ediyor. Ayrıca, bir yan notta, w3wp işleminde topladığım metrikler ve windows hizmeti kesinlikle normal görünüyor.
António Sérgio Simões

ASP neredeyse hiçbir şey bilmiyorum, ama java gibi bellek tüketimi ve çöp toplama grafik için bir yol olduğunu varsayalım, bu kök neden olduğundan emin olmalısınız.
Tensibai

Yanıtlar:


7

Aynı "testere dişi" modelini diğer sistemlerde, özellikle de Java tabanlı bir veri aracında gördüm. Açıklamanıza dayanarak, .NET çöp koleksiyonuna baktığınızı düşünüyorum (bunun bir .NET uygulaması olduğunu varsayalım.) Java ve .NET hem bellek tarafından yönetilen diller hem de çöp toplama kullanan çerçevelerdir.

Bir bellek sızıntısı tipik olarak geçersiz kılma veya çöp toplayıcı kafa bir bellek tarafından yönetilen bir çerçeve üzerinde bellek yönetimi eksikliği ya da bir program çerçeveler bulunur.

Bunların en yüksek trafikli sunucularınız olması mantıklı. .NET çerçevesinin gerektiği şekilde bellek ayırdığını görüyorsunuz, ardından çöp toplayıcı düzenli bir döngüde devreye giriyor ve çöp toplama algoritmalarını kullanarak kullanılmayan belleği geri alıyor. Belirli performans sorunlarını izlemediğiniz sürece bu bellek kullanım düzeninin bir sorun olduğunu düşünmüyorum.


Gerçekten bir .NET uygulaması ve son birkaç gün içinde yaptığım araştırmadan, siz ve @Tensibai'nin ne yazdığı çok mantıklı.
António Sérgio Simões

7

Sanırım bu grafik neden böyle görünüyor.

Ayrıca ASP.NET Uygulamaları / Hatalar Toplam performans sayacı için metrikler topluyorum ve tam olarak aynı zamanda kullanılabilir bir bellek dalgalanması gerçekleştiğini, Toplam Hatalar metriğinin 0'a sıfırlandığını fark ettim.

Msdn'ye göre, uygulama yeniden başlatıldığında / kapatıldığında bu sayaç 0'a sıfırlanır.

Bu beni bu bellek kullanılabilir testere dişi desen neden uygulama yeniden başlıyor nedeniyle olduğuna inanmak için yol açar.

Grafiklerim şöyle:

Toplam ASP.NET Uygulaması Hataları Bellek Dalgalanması

GÜNCELLEME

Bunun nedeni, W3WP işleminin Özel Baytlarının geri dönüşüm sınırını aşmasıdır (Uygulama havuzunda yapılandırılmış bir özel bayt sınırımız var). Özel Bayt grafiğine yakından baktığımızda anormal bir şey olduğunu görebiliriz çünkü Bellek kullanımı 650MB'dan 3.2GB'a ve birkaç saat sonra 3.6GB'dan 16.6GB'a sıçradı! Bu geri dönüşümün gerçekleştiği zamandır.


2
Bu çok daha akla yatkın bir açıklama. Ani bellek boşaltma neredeyse sadece süreç yeniden başlatıldığında gerçekleşir. Çalışan süreçlerin hafızasını serbest bırakma mekanizmaları, önceden belirlenmiş yığın üzerinde biraz yer açmak yerine asla bu kadar keskin değildir ve nadiren hafızayı serbest bırakır.
Jiri Klouda
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.