Sunucularımızda gece yarısı önbellek bırakma alışkanlığımız var.
sync; echo 3 > /proc/sys/vm/drop_caches
Kodu çalıştırdığımda çok miktarda RAM boşaltmak gibi görünüyor, ama gerçekten bunu yapmak zorundayım. Boş RAM kaybı yok mu?
Sunucularımızda gece yarısı önbellek bırakma alışkanlığımız var.
sync; echo 3 > /proc/sys/vm/drop_caches
Kodu çalıştırdığımda çok miktarda RAM boşaltmak gibi görünüyor, ama gerçekten bunu yapmak zorundayım. Boş RAM kaybı yok mu?
% 100 doğru sizsiniz. Bu değil RAM'i boşaltmak için iyi bir uygulama. Bu muhtemelen kargo kült sistemi yönetiminin bir örneğidir.
Evet, önbelleği temizlemeniz RAM'i boşaltacaktır, ancak çekirdeğin önbellekten ziyade diskteki dosyaları aramasına neden olarak performans sorunlarına neden olabilir.
Normalde çekirdek kullanılabilir RAM tükendiğinde önbelleği temizler. Sık sık kirli içeriği pdflush kullanarak diske yazar.
Önbellekleri bunun gibi bırakmanın nedeni disk performansını karşılaştırmaktır ve var olmasının tek sebebidir.
G / Ç yoğun bir kıyaslama çalıştırırken, çalıştığınız çeşitli ayarların aslında disk G / Ç'sini yaptığından emin olmak istersiniz, bu nedenle Linux tam bir yeniden başlatma yapmak yerine önbellekleri bırakmanıza izin verir.
Alıntı yapmak belgeleme:
Bu dosya, çeşitli çekirdeğin büyümesini kontrol etmek için bir araç değildir. önbellek (inode, dişçilik, pagecache, vs ...) Bu nesneler bellek başka yerde gerekli olduğunda otomatik olarak çekirdeği tarafından geri sistemde.
Bu dosyanın kullanılması performans sorunlarına neden olabilir. O attı çünkü önbelleğe alınmış nesneler, önemli miktarda I / O ve CPU'ya mal olabilir. Düşen nesneleri, özellikle de ağır kullanımdaysa yeniden oluşturun. Bu nedenle, bir sınama veya hata ayıklama ortamı dışında kullanmak tavsiye edilmez.
Buradaki temel fikir muhtemelen o kadar da kötü değil (sadece çok saf ve yanıltıcı): Önbelleğe alınan, yakın gelecekte erişilemeyen, örneğin günlük dosyaları olan dosyalar olabilir. Bu "yemek" ram, daha sonra OS tarafından bir veya başka şekilde gerektiğinde serbest bırakılması gerekir.
Takas ayarlarınıza, dosya erişim düzenine, bellek ayırma düzenine ve çok daha fazla tahmin edilemeyen şeylere bağlı olarak, bu önbellekleri silmediğinizde, daha sonra yeniden kullanılmaya zorlanacaklar, bu da daha az zaman alır. belleği kullanılmayan bellek havuzundan ayırmak. En kötü durumda, linux'un swappiness ayarları program belleğinin değiştirilmesine neden olur, çünkü linux, bu dosyaların program belleğinden daha yakın bir gelecekte kullanılmasının daha muhtemel olduğunu düşünür.
Benim ortamımda, linux oldukça sık yanlış tahmin ediyor ve çoğu Avrupa borsa borsalarının (saat 09.00 civarında) başlangıcında, sunucular günde bir kez yapmaları gereken şeyleri yapmaya başlayacaklar, daha önce yazıldığından dolayı hafızada yer değiştirmeye ihtiyaç duyuyorlardı. günlük dosyaları, onları sıkıştırmak, kopyalamak vb. önbellekleri, şeylerin değiştirileceği noktaya kadar doldurmaktaydı.
Ama bu problemin çözümünü önbelleğe aldırıyor mu? kesinlikle değil. Buradaki çözüm, Linux'un bilmediği şeyleri anlatmaktır: bu dosyaların artık kullanılmayacağı. Bu gibi şeyler kullanarak yazma uygulaması tarafından yapılabilir posix_fadvise()
veya gibi bir cmd satır aracı kullanarak vmtouch
(ayrıca önbellek dosyaları gibi şeylere bakmak için de kullanılabilir).
Bu şekilde, artık gerekli olmayan verileri önbelleklerden kaldırabilir ve önbelleğe alınması gerekenleri saklayabilirsiniz, çünkü tüm önbellekleri düşürdüğünüzde, bir çok şeyin diskten yeniden okunması gerekir. Ve mümkün olan en kötü zamanda: gerektiğinde; uygulamanızda fark edilir ve genellikle kabul edilemez gecikmelere neden olur.
Yerine koymanız gereken şey, bellek kullanım kalıplarınızı (ör., Bir şey değişiyorsa) izleyen ve buna göre analiz eden ve buna göre hareket eden bir sistemdir. Çözüm, vtouch kullanarak günün sonunda bazı büyük dosyaları tahliye etmek olabilir; Ayrıca sunucunun günlük tepe kullanımı sadece bu olduğundan daha fazla ram eklemek olabilir.
Bir sürü sanal makineyi çalıştırırken faydalı olabilecek önbellekleri gördüm. Veya bazı veritabanı sunucuları gibi Büyük Sayfaları kullanan başka herhangi bir şey.
Linux'taki Büyük Sayfalar, bir sayfaya yerleştirmek için 2MB bitişik fiziksel RAM bulması için genellikle RAM'i birleştirmek zorundadır. Tüm dosya önbelleğini serbest bırakmak bu işlemi çok kolaylaştırır.
Ama diğer cevapların çoğuna katılıyorum, çünkü her gece dosya önbelleğini bırakmak için genelde iyi bir sebep yok.
Bu sorunu, aslında problemi bulmak için beceri veya deneyime sahip kimse olmadığında sistemi stabilize etmenin bir yolu olarak kurulmuş olabilir.
Önbelleklerin düşürülmesi, bazı kaynakları serbest bırakacaktır, ancak bu, sistemin gerçekten yapmaya çalıştığı şeyi yapmak için daha fazla çalışmasını sağlamanın bir yan etkisine sahiptir. Sistem değişiyorsa (disk takas bölümünden okuma ve yazma işlemi gerçekte olduğundan daha hızlıdır) önbelleklerin periyodik olarak düşürülmesi kolaylaşır. semptomama tedavi etmek için hiçbir şey yapmaz sebeb olmak.
Önbelleklerin çalışmasını engelleyen çok fazla bellek tüketimine neden olan şeyi belirlemelisiniz. Bu, herhangi bir sayıda kötü yapılandırılmış veya yalnızca yanlış kullanılmayan sunucu işlemlerinden kaynaklanabilir. Örneğin, bir sunucuda bir Magento web sitesi 15 dakikalık bir aralık içinde belirli sayıda ziyaretçi ulaştığında maksimum bellek kullanımına tanık oldum. Bu, Apache'nin çok fazla işlemin eşzamanlı olarak çalışmasına izin verecek şekilde yapılandırılmasına neden oldu. Çok fazla işlem kullanan, çok fazla bellek kullanan (Magento bazen bir canavardır) = değiş tokuş.
Sadece bunun gerekli bir şey olduğunu düşünmeyin. Neden orada olduğunu bulmakta proaktif olun, başkalarının yanlış olduğunu öne sürerse onu devre dışı bırakmaya cesaret edin ve sistemi gözlemleyin - gerçek sorunun ne olduğunu öğrenin ve düzeltin.
Linux / m68k gerçekte kswapd'ın çıldırmasına ve% 100 CPU'yu tüketmesine neden olan bir çekirdek hatasına sahiptir (bir Debian ikili paket autobuilder gibi başka bir CPU'ya bağlı görev varsa -% 50 çalışan) - zamanın her zaman değil, her birkaç saatte bu özel komutu çalıştırarak azaltılabilir.
Bu söyleniyor ... sunucunuz büyük olasılıkla bir m68k değil (Atari, Amiga, Klasik Macintosh, VME, Q40 / Q60, Sun3) sistemi ;-)
Bu durumda, çizgiye giren kişi ya bazı tartışmalı ya da en iyi ihtimalle güncel olmayan tavsiyeleri izledi ya da RAM'in nasıl kullanılmasının gerektiği hakkında fikre sahip oldu (modern düşünce aslında “boş RAM'in RAM israfı” der ve önbelleğe almayı önerir) ya da bu “düzeltmeler” in [başka bir yerde] başka bir sorun olduğunu (ve doğru bir düzeltmeyi aramak için çok tembeldiğini) “keşfetti”.
Bir neden, sitenin bir tür izleme çalışması yürütmesi, serbest ram miktarını kontrol etmesi ve serbest ram belirli bir yüzde altına düştüğü zaman yöneticilere uyarı gönderilmesi olabilir. Eğer bu izleme aracı, ücretsiz ram hesaplamasına önbellek eklenmemesi için yeterli değilse, yanlış uyarılar gönderebilir; önbelleği düzenli olarak boşaltırken, bu uyarıları bastırıp, aracın "gerçek" ram alçaldığında farkına varmasına izin verebilir.
Elbette, bu tür bir durumda, asıl çözüm, izleme aracını ücretsiz ram hesaplamasında önbellek içerecek şekilde değiştirmektir; önbelleği temizlemek yalnızca bir geçici çözüm ve kötü bir şeydir, çünkü işlemler diske eriştiğinde önbellek hızlı bir şekilde yeniden dolduracaktır.
Benim varsayımım doğru olsa bile, önbellek temizliği mantıklı olmayan bir şey değildir, birincil sorunu çözmek için yetkin olmayan bir kişi tarafından bir çözümdür.
Bunu bir gece cron işinde yapmak için makul bir sebep düşünebilirim.
Büyük bir sistemde, bellek parçalanmayı kaldırabilmeniz için önbellekleri periyodik olarak düşürmek yararlı olabilir.
Kernel şeffaf büyük sayfa desteği, küçük sayfaları büyük sayfalara birleştirmek için periyodik bir bellek taraması yapar. Dejenere koşullar altında bu, bir veya iki dakikadaki sistem duraklamaları ile sonuçlanabilir (bununla ilgili deneyimim RHEL6'deydi; umarız iyileşti). Damlama önbellekleri, büyük sayfalık süpürücünün çalışacak bir odaya sahip olmasına izin verebilir.
Saydam büyük sayfaları devre dışı bırakmanın iyi bir nedeni olduğunu iddia edebilirsiniz; OTOH şeffaf büyük sayfalardan genel performans iyileştirmeye değer olduğuna inanıyor olabilir ve günde bir kez önbellekleri kaybetme fiyatı ödemek için değer.
Bir cron işinde olmasa da, bunu yapmak isteyeceğiniz başka bir sebep düşündüm. Sanallaştırma sisteminin hemen öncesinde bir VM'yi yeni donanıma geçirmesi bunun için çok iyi bir zaman olacaktır. Yeni ana bilgisayara kopyalanacak daha az hafıza içeriği. Sonunda, depodan okumak zorunda kalacaksın, elbette, ama muhtemelen bu tradeoffu alacağım.
Gerçekten yazılımlardan herhangi birinin bunu yapıp yapmadığını bilmiyorum.