Drupal 7 sitelerimden birinde binlerce alan, bir sürü içerik türü, 25 görünümden fazlası ve yüzlerce (yakında binlerce) profil türü var. Bu nedenle, varlık alanı bilgilerini daha iyi önbelleğe alan bir çekirdek düzeltme eki (http://drupal.org/node/1040790) ve görünümleri görüntüleyerek daha iyi önbelleğe alan Görünümlerin -dev sürümünü kullanıyorum (bir HUGE'a sahip olmak yerine) önbellek satırını, içindeki tüm görünüm verileriyle birlikte görüntüler).
Bu, sitedeki çoğu sayfanın 160 MB + yerine 20 - 30 MB RAM kullanmasına yardımcı oldu (10 MB + olan alanlar ve görünümler için önbellek_ * tablo satırları almak yerine yamalar önbellek_ * verilerinin çok daha verimli tutulmasına yardımcı oldu).
Ancak bu, önbellek yeniden oluşturma işlemlerinin gerçekten çok uzun sürdüğü bir sorunu ortaya koyuyor . Genellikle bir iki dakikadan fazla. Ve bu süre zarfında, Drupal basitçe herhangi bir sayfa yüklemeyecektir (okumaya çalıştığı önbelleklerin henüz oluşturulmadığı için diğer isteklerin beklemesi gerekir).
Düşük trafik döngüsü sırasında bu önemli bir şey değil; Yüzlerce kullanıcı sadece sayfa yüklenmeden önce bir dakika beklemek zorunda kalacak. Ancak, yoğun trafik sırasında Apache sunucusu 40+ CPU yüküyle çıldırmaya başlar ve tüm çalışan iş parçacıkları beklemeye girip belleklerini değiştirerek bellek değiştirmeye neden olur. Bir çeşit ölüm spirali. Bir httpd yeniden başlatılması işleri temizleyecektir, ancak işlerin normale dönmesi 5-10 dakika sürer.
Amacım, önbelleklerin siteyi dizlerine çekmemesi için temizlemektir. Birincisi, admin_menu'nun bireysel önbellek temizleme işlevlerini kullanırsam ("CSS ve JS", sonra "Menü", sonra "Tema kayıt defteri", vb.), "Sayfa ve diğer" seçeneğine basana kadar işler düzgün gider. Bu, görünümlerin önbelleği sıfırlandığında (önbelleklenmesi gereken görünüm sayısıyla çok CPU ve veritabanı yoğun bir işlem) ve alan bilgisi önbelleği sıfırlandığında (bu site de CPU ve veritabanı yoğun olur).
Yani ... benim soru / fikirlerim:
- Sarhoş ve / veya diğer kabuk komut dosyalarını kullanarak, önbellekleri "tüm önbellekleri bir kerede patlatmak ve temiz bir yeniden oluşturma umudundan" daha akıllıca temizlemek mümkün mü?
- Önbellek temizliği yapılırken http isteklerini engelleyebilir miyim, böylece apache bir miktar önbellek damgalama isteğiyle tıkanmaz.
- Drupal / normal httpd isteğinin dışındaki önbellekleri temizleyebilirsem, önbellek temizleme işlemi için daha yüksek bir PHP memory_limit ayarlayabilirim ve evrensel memory_limit'imi devre dışı bırakabilirim (şu anda herhangi bir httpd iş parçacığının önbelleğe alınması gerekiyorsa, şimdi 256 MB olarak ayarlanmış olabilir) ...).
Temel olarak: Kullanıcı arayüzündeki düğmeye tıklamanın yanı sıra Drupal ile tüm önbellekleri temizlemenin akıllıca ve zarif bir yolu var mı drush cc all
?
[ Açıklama için düzenle : Sahip olduğum ana sorun , (a) biraz zaman alan ve (b) yeniden yapılanmalar tamamlanana kadar diğer tüm istekleri engelleyen önbellek yeniden yapılandırmalarıdır. Bunu yapmanın bir yolunu bulmak istiyorum, böylece yeniden yapılanmalar yüksek trafik zamanlarında ölümcül olmayacak.]