Ayrıca Drupal bellek sorunları ile başımı duvara dayayordum. İşte konu hakkında topladığım bilgiler:
1. Görüntülemeler çok fazla bellek kullanabilir (kullanabilir)
Bana bazı Görünümleri seviyorum (ve Paneller ve CTools ve merlinofchaos güçlü, güçlü parmaklarıyla temas ettiği her şey), ancak çok fazla bellek kullanan çoklu ilişkilerle yapılandırmalar oluşturmak mümkündür. Görünümlerinizi devre dışı bırakırsanız ve bellek sorunu ortadan kalkarsa, muhtemelen soruna neden olan kötü yapılandırılmış bir Görünüm vardır.
Bir Görünümse ve gerçekten bu Görünüm'ün çalışması için ne yapmalısınız? Başlamak için koda koymayı deneyin (Toplu Aktarıcı veya Özellikler Üzerinden; aşağıya bakın. Performansı çok az bir başarı ile iyileştirmek için Views benzeri fonksiyonlar kodladım). Başka bir düşünce, Görünümü farklı bir şekilde yeniden yapmaktır - sonuçta elde ettiğiniz şey sınıflandırma terimleri ise, görünümü oluştururken Görünüm türünün bir Sınıflandırma Görünümü olduğundan emin olun; sınıflandırma terimlerine ulaşmak için ilişkileri kullanan bir İçerik Görünümü oluşturmayın.
Burada ayrıca Panels'ın çok fazla bellek kullandığını da belirtmek gerekir - gerçekten kıyaslamamıştım, bu yüzden bunu doğrulayamıyorum.
2. Veriyi veritabanından koda taşımak çok iyi bir uygulamadır
Bunu gerçekleştirmek için birkaç Drupal sitesi aldı, ancak veritabanında bir kullanıcı arayüzü aracılığıyla oluşturulan her şeyi (özellikle Görünümler ve Paneller yapılandırmaları) tutmak Drupal'ın en kötü uygulamasıdır. Neden? Veritabanındaki yükü artırır ve sürüm kontrollü olamaz. İlk nokta, bellek kullanımı açısından özellikle sorunludur. İçeriği veritabanından görüntülemek yerine, sitenin ayrıca görünüm bileşenlerini de yüklemesi gerekir. Bu, Drupal'ın tabloları nasıl kullandığıyla daha da kötüleşir: her şeyi n. Dereceye kadar soyutlayarak, Drupal'ın işlevselliğinin her bir biti yeni bir tablo kullanır, bu da bazı isteklerin bir bajillion tablosunu birleştirmesine neden olur. Bu, Bilgisayar Bilimi insanlarına fıtık verir (uyarı: bağlantı saçmadır), ancak Drupal gibi modüler ve kullanıcı dostu bir yazılım parçasıyla gerçekten önlenemez.
Çözüm? Modül kodu olarak veritabanında bulunan kod parçalarını paketlemek için Toplu Dışa Aktarıcı'yı (CTools ile birlikte verilir) veya Özellikler'i kullanın.
3. Temalar hafızayı da yiyebilir
Temanızda çok sayıda şablon dosyası var mı (yani, ad / şablonlar / dosyalardaki dosyalar)? Bu durumda, bu dosyalardan biri her yüklendiğinde bellek tüketilir. Özellikle Drupal parçalarının görüntülenmesini engellemek için şablonlar oluşturuyorsanız, şunlardan birini deneyin:
- Yönetici olmayan belirli kullanıcı rolleri için bit görünmeyecek şekilde izinleri değiştirme.
- Öğeleri gizlemek için CSS kullanma.
İlk seçenek, güvenliği etkileyen şeyler için yapmak istediğiniz şeydir - belirli kullanıcılar için bir "düzenle" düğmesini gizlemek için CSS kullanmak istemezsiniz, ancak onları Firebug veya başka bir şekilde göstermesini istersiniz.
4. Katkı modüllerinde aşırıya kaçmayın
Bazen bir site çok sayıda katkı modülüne ihtiyaç duysa da, aşırıya kaçmayın. Her etkin (not: etkin. Devre dışı bırakılan modüller bellek kullanmaz) modülü bellek kullanır. Bu biraz açık, ama dikkate değer.
5. VPS (bazen) bir yalandır
Deneyimlerime göre, bazı vicdansız barındırma şirketleri Drupal sitelerini VPS sunucularına zorlamaya çalışıyor - daha pahalı ve daha fazla WordPress web sitesi için paylaşılan barındırma alanını serbest bırakıyor. Durum, webhosts genellikle paylaşılan barındırma için üst bellek sınırının ne olduğunu (ya da isteyerek sorulursa size isteyerek söyleyin) gerçeği ile daha da kötüleşir.
Ne yazık ki, bir site yoğun trafik altında değilse ve hala çöküyorsa, sorunun Drupal'ın yapılandırmasıyla ilgili her şeyden daha fazla bir şeyleri vardır. Bir kullanıcıyı VPS'ye itmek, suları çamurlaştırır ve başa çıkmak için daha fazla değişken ekler (Web sunucusu yapılandırması mı? PHP yapılandırması mı? VPS konuk yapılandırması mı? VPS ana bilgisayar yapılandırması, hatta?).
6. Her şey başarısız olduğunda, localhost'a klonlayın ve bir sopayla dövün
Bu, kullanıcıların sürüm kontrolü ile dev-evreleme-üretim metodolojisini kullanmasının büyük bir nedenidir - her şey başarısız olduğunda, bir DB dökümü yapabilir, siteyi yerel bir test sunucusuna kopyalayabilir ve ardından siteyi üretim sunucusundaki herhangi bir şeyi kırma konusunda endişelenmeden sunucuyu test etme
Bellek sorunları için, bu genellikle soruna neden olan modül ortaya çıkana kadar modüllerin tek tek devre dışı bırakılması anlamına gelir. Ayrıca, webhost ile ilgili sorunlara da işaret edebilir - site 128MB gibi makul bir şeye ayarlanmış bir bellekle yerel bir kurulumda mükemmel çalışırsa, webhost'unuzun çatladığını biliyorsunuzdur.
tl; Dr.
Bağırsam, soruna neden olan chain_menu_access olmasıdır. Bunu devre dışı bırakmayı ve önbelleği temizlemeyi deneyin, çalışıp çalışmadığını kontrol edin.
Denemek için başka şeyler düşündüğümde de bu cevaba ekleyeceğim ...