Linux neden neredeyse dolduğunda bellek önbelleğini temizliyor?


14

Günde birkaç bin ziyaretçiye (çoğunlukla statik) içerik sunan 512 MB RAM ve nginx / php-fpm / mysqld ile CentOS çalıştıran bir VPS'de bellek grafiği neye benziyor.

Haftalık bellek grafiği

(bunlar x eksenindeki günlerdir)

Gördüğünüz gibi, önbellek ve arabellek alanında oldukça gergin. Bellek önbelleği düzensiz aralıklarla temizlenir (sorumlu bir cron işi reddedilir). Genellikle, ancak her zaman değil, daha büyük büyüyemeyeceği bir noktada temizlenir. Bazen neredeyse tamamen temizlenir, bazen de sadece yarıya iner.

Bu tasfiyelerin ardındaki mantığı anlamaya çalışıyorum. Dosya verilerinin çok daha fazla önbelleğe alınmasını beklerim ve bellek önbelleği temizlendiğinde normalden daha fazla bellek kullanan başka programlar görmezdim.

Bu normal bir davranış mı, yoksa bir şey mi kaçırıyorum?

GÜNCELLEME: Bir bellek yükseltmesi grafiği stabilize ediyor gibi görünüyor. Hala küçük damlalar görüyorum, ancak hiçbir şey yükseltme öncesi kadar önemli değil.

Bellek yükseltmeden sonra


Bu bir OpenVZ / Virtuozzo kabı mı yoksa XEN veya KVM gibi gerçek bir VM mi?
jordanm

1
Ne olduklarını açıklayamam, ama aynı davranışı gösteren bir VPS var. dl.dropbox.com/u/1578899/memory-week.png
EightBitTony

@jordanm Xen tabanlı bir sanal makine.
redburn

@EightBitTony Paylaştığınız için teşekkürler. Seninki biraz daha 'doğal' görünüyor, ama bellek önbelleğinde benzer (ama belki de daha tahmin edilebilir) bir damla deseni açıkça görüyorum.
redburn

Munin 2'nin verileri bazı farklılıklara (sizinki üzerinde daha pürüzsüz bir grafik) neden olacak kadar farklı şekilde grafikleyip çizip çizmediğini merak ettim, ancak benimki bile günlük değil bir döngünün ortasında bir düşüş gösteriyor. Kesinlikle garip.
EightBitTony

Yanıtlar:


3

Bir sürü şey olabilir. Belki çalıştırdığınız programlardan biri zaman zaman ve kısaca çok fazla RAM kullanıyor olabilir. X ekseninde gerçekten haftalar geçiyorsa, önbelleğin düşmesine neden olan şey hakkında daha fazla bilgi almak için çok daha yüksek bir çözünürlükte (örneğin dakikada bir veya saniyede bir) örneklemelisiniz. psve topbu süre zarfında çıktı (yük ortalaması dahil) da faydalı olacaktır.


Evet, sanırım bir dakika içinde gerçekleşen ve Munin tarafından fark edilmeyen çok kısa, ani bir patlama patlaması önbellek dökülebilir, tabii ki devam ettiği için lekelenebilir.
EightBitTony

Üstbilgi biraz kafa karıştırıcı, çünkü aslında bir haftalık veri gösteriyor, bu yüzden bunlar hafta değil x-as günleridir. Yoklama sıklığına gelince: Munin her 5 dakikada bir veri getirir ve bu frekansın değiştirilebileceğini düşünmüyorum. Sadece nginx, mysql, php-fpm ve munin-node çalıştırıyorum. Belki de mysql önbelleğiyle bir ilgisi olabilir mi?
Redburn

Ben (her 5 saniyede bir çıktısını bir dosyaya yazmak) üst vardı, o zaman bu dosyayı analiz ve önbellek aniden düştü noktada alışılmadık davranış gösteren hiçbir işlem bulunamadı. Bir süreç bu kadar hafızayı kullanamaz ve yine de 5 saniyelik pencereden kaçmazsa, bunun neden olabileceğine ikna olmadım. Ama eğer hiçbir şey işleyen bir süreç yoksa, ne olabilir?
redburn

Bu iş parçacığı biraz bayat, ancak yöntembilim hakkında hızlı bir gözlem: bir işlemin sistem belleği önbelleğine ne kadar katkıda bulunduğu (çok kolay) üste yansıtılmayacaktır , çünkü çok aktif bir işlem önbelleğe kendi başına çok hızlı bir şekilde yığılabilir ayrılan bellek çok artıyor. Örneğin, iletim için küçük parçalar halinde çok büyük bir dosyayı okumak - işlem hiçbir zaman ayrılan birkaç MB'den fazlasını kullanamazken , bu birkaç MB sürekli olarak değişecek ve önbellekteki referansları biriktirecektir. Bu yüzden en iyi çıktıya bakılacak şey ani bir CPU zamanı birikimi olacaktır.
goldilocks

Ayrıca ilginizi çekebilir: cognitivedissonance.ca/cogware/plog
goldilocks

2

Olası nedenlerden biri, bir günlük gibi, belirli bir boyuta ulaştığında kaldırılan, sıkıştırılan veya başka bir yere gönderilen büyüyen bir dosya olabilir.

Her iki durumda da, önbelleğe alınan boyutu, muhtemelen işletim sisteminizde bellek basıncı yoksa, tümü orijinal dosya kaldırılır kaldırılmaz önbellekten kaldırılır.


İlginç bir fikir, ancak en aktif günlük dosyaları döndürülmeden önce nadiren 25 MB dosya boyutunu aşar ve önbellek / arabellek kullanımı yaklaşık 200 MB düşme eğilimindedir.
redburn
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.