Bellek sınırını artırmak Önemli hatada yardımcı olmaz: İzin verilen… / modülleri / görünümler / görünümler. 416 numaralı satırda izin verilen bellek boyutu


11

Üç hafta önce Drupal 7.14'ten 7.15'e geçtim ve bu nedenle, bir dizi çok karmaşık (benim için) bellek sınırı hatasıyla karşılaşıyorum . Performansta önbelleği temizlemeye veya güncelleme komut dosyalarını çalıştırmaya çalıştığımda bu hatalar oluşuyor.

Hosting şirketim php.ini'deki bellek sınırımı 126 M, 256 M, 512 M ve hatta 1024 M'ye kadar artırdı. Ancak hatalar hala devam ediyor. Sitemi paylaşılandan VPS'ye taşıdım, ancak hata hala inanılmaz derecede oluşuyor. Nasıl ilerleyeceğimin hiçbir yolu ve hiçbir fikrim yok.

İşte hatalar:

  • Önemli hata: 416 satırında /home/example/public_html/sites/all/modules/views/views.module içinde izin verilen 536870912 baytın izin verilen bellek boyutu (30 bayt ayırmaya çalışıldı)
  • Önemli hata: 2736 satırındaki /home/example/public_html/includes/menu.inc içinde izin verilen 536870912 baytın izin verilen bellek boyutu (108 bayt ayırmaya çalışıldı)

  • Önemli hata: 59. satırdaki /home/example/public_html/sites/all/modules/chain_menu_access/chain_menu_access.module içinde izin verilen 536870912 baytın bellek boyutu tükendi (71 bayt ayırmaya çalıştı)

  • 64 bayt ayırın) /home/example/public_html/sites/all/modules/views/includes/base.inc satırında 93. satırda


Yoğun trafiğiniz nedir (sayfa / saniye). Ayrıca görünüm ne kadar veri (düğüm?) Getirmeye çalışıyor?
cherouvim

drupal.org'da benzer tartışma drupal.org/node/76156
Anoop Joseph

2
Şans eseri çok sayıda sonuç döndüren bir görünümünüz var mı ve biçim için alanlar yerine içerik yüklüyor mu? Bu engelleme performansını daha önce birçok kez gördüm.
Jepedo

Merhaba millet! Cevaplarınız için çok teşekkürler. Ben th web sitesi bakım modunda olduğunu ve test amacıyla sadece birkaç içerik (düğüm) içerdiğini söylemek istiyorum. Siteyi yalnızca tarayıcılar ziyaret ediyor. Benim yazımda da belirttiğim gibi, drupal.org/node/76156 düğümünde önerilen php.ini çözümündeki bellek artış sınırı benim durumumda yardımcı olmadı. Alan yerine içerik yükleyen görünümler için. Ben nasıl onu anlamaya istiyorum
salift

1
Drupal 7.14'e geçmeyi denediniz mi? Drupal 7.15'e yükseltme bu soruna neden olduysa, neden geri dönmeyi denemiyorsunuz? Benim önsezim, modüllerinizden birinde sonsuz özyineleme olması. Views ile ilgili modülleriniz nelerdir?
Johnathan Elmore

Yanıtlar:


13

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:

  1. Yönetici olmayan belirli kullanıcı rolleri için bit görünmeyecek şekilde izinleri değiştirme.
  2. Öğ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 ...


... ve bu soruya bir lütuf kattığımda umduğum bir şey! Özellikle 2. 110 size iyi efendim :) Umarım bu da biraz farklı deneyimleri olan diğer bazı yararlı yorumlar çekmek olacaktır
user56reinstatemonica8 20:12

ps Devre dışı bırakılan modüller bile dosyaları ayrıştırmak için belirli miktarda bellek kullandığını çeşitli yerlerde duydum. İnsanlar doğru görünmese de (muhtemelen sadece bilgi dosyaları), tüm php / inc dosyalarının bir şekilde ayrıştırıldığını söylediğini gördüm. Bunda herhangi bir doğruluk var mı?
Kullanıcı56reinstatemonica8

Harika, teşekkürler! Eminim ki Drupal'ın dosyaları yüklerken oldukça bellek vicdanı var - XHProf'u çalıştırırsanız, file_scan_directoryyeterli belleği kullanmak için çağrı sayısı . Yine de, bunu onaylamak için devel ile bazı şeyleri test edeceğim.
aendrew

Devre dışı bırakılan modüller herhangi bir bellek kullanıyorsa, bu oldukça önemsizdir. Bir modülü silmeden önce ve sonra Devel tarafından ne kadar bellek bildirildiğine baktım - dosyaları kaldırdıktan sonra sayfa yenilemesi küçük (<1MB) bir artış gösterdi, ancak bir sonraki yenilemede tam olarak silme öncesi değerlerine döndü. Bu beni Drupal a. Yeni .info dosyası olup olmadığını görmek için önyükleme sırasında modüller dizinini tarar. B. Modülün ayrıntılarını systemtablosuna ekler c. System.status alan girişleri olarak ayarlanmış modülleri yükler 1. Birisi bunu onaylayabilir veya çürütürse, çok sevinirim.
aendrew

2

İstekte neler olduğunu denetlemek için XHProf veya Xdebug'un yerleşik profiler gibi PHP profillerini koymayı deneyebilirsiniz.


Hangi parçaların özellikle hangi bellek miktarına ihtiyaç duyduğunu anladıktan sonra 1. Adım. Aslında neden bu kadar bellek kullandığını ve nasıl azaltılacağını anlamaya çalışmakla ilgilidir. Yukarıda insanlar sonuçta çok fazla şey hakkında konuşurlar. Genel olarak bu basit bir şekilde tarif edilemeyen bir süreçtir.
Daniel Wehner

1

Views bir bellek domuzudur. Drupal'ın önbelleğe alınması yardımcı olabilir. Drupal, yalnızca tablolar oluşturuyorsa veya takılabilecek başka nesneler varsa modülleri etkin olarak yükler. Yalnızca kaldırma işlemi, eserlerin çoğunu kaldıracaktır. Drupal'ın yetkilendirmesini / izinlerini kullanıyoruz ve içine kendi modülümüzü yazıyoruz. En iyisi değil, performansı ayarlamak çok daha iyi ve daha kolay. Aynısını WP için de yapıyoruz.


0

Benim durumum bellek sınırı sorunu önbellek sistemi (Boost ve Boost Expire modülleri) tarafından üretildi. Bu bana modül veya görünümleri güncelleme sorunu verir. Devre dışı bırakıldıktan sonra Boost modülleri iyi çalışır.

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.