Ölüm beyaz ekranı: Önemli hata: İzin verilen X bayt bellek boyutu tükendi


21

Drupal kurulumumla ilgili bir sorunum var, örneğin:

  • modülleri etkinleştirdiğimde veya devre dışı bıraktığımda, beni boş bir sayfaya yönlendiriyor,
  • yeni bir içerik türü oluşturup kaydettiğimde, beni boş bir sayfaya yönlendirir,
  • yeni bir görünüm ekleyip kaydettiğimde, beni boş bir sayfaya yönlendiriyor,
  • önbelleği temizlemeye çalıştığımda, beni boş bir sayfaya yönlendirir
  • veya benzer durumlarda.

Temelde tüm onay sayfaları beni beyaz bir ekrana yönlendirir. Tekrar yenilediğimde bana sayfayı gösteriyor. PHP bellek değerini arttırmaya çalıştım ama işe yaramadı.

Bunun için başka çözümler var mı?

Yaptığım hata:

Önemli hata: 100663296 baytlık izin verilen bellek boyutu tükendi (8192 bayt ayırmaya çalıştı), sitelerde / all / module / views / plugins / views 1


2
Her zaman hata günlüklerini kontrol edin, gerekli tüm bilgilere sahip olacaktır. Sanki senin hafızan bitiyor gibi. Drupal 7, çoğu ana bilgisayar sağlayıcısının varsayılan olarak belirlediği 32 MB'den fazla gerektirir.
GoodSp33d

Yanıtlar:


20

Bunun geç olabileceğini biliyorum ama bana yardımcı oldu. Çoğu zaman bir modül WSOD'ye neden olur, sadece süreçte veri kaybetmiş olabileceğimi test ettiği modülleri devre dışı bırakamadım. Yaptığım şey bu dizini geçici olarak module.incçekirdek includesdizinde düzenlemekdi.

function module_invoke_all($hook) {
  $args = func_get_args();
  // Remove $hook from the arguments.
  unset($args[0]);
  $return = array();
  foreach (module_implements($hook) as $module) {

        print "Starting loading $module <br />";

        $function = $module . '_' . $hook;
        if (function_exists($function)) {
          $result = call_user_func_array($function, $args);
          if (isset($result) && is_array($result)) {
            $return = array_merge_recursive($return, $result);
          }
          elseif (isset($result)) {
            $return[] = $result;
          }
        }

        print "Finished loading $module <br />";

  }

  return $return;
}

Ve bu 2 baskı ifadesini yukarıdaki kodda ekledim, sonra sayfayı yenile, "$ $ modülü yüklemeyi bitir" ifadesine ulaşamayan modül, sorunumda olanı ... benim durumumda devel oldu.

Modülü bulduktan sonra, sistem tablosuna gidip bu modülü arayabilir, status = 0 ve bootstrap = 0 olarak ayarlayabilir veya sorguyu çalıştırabilirsiniz:

UPDATE system SET status = 0, bootstrap = 0 WHERE name = 'module_name' LIMIT 1

Referans: Drupal Ölüm Beyaz Ekranını Hata Ayıklama (WSOD)


1
Print ifadelerini module_invoke_all öğesine eklemek, sorunlu modülü hızlıca bulmamı sağladı. Sonra onu etkisiz hale getirmek için sarhoş kullandım. Ne hayat kurtarıcı!
Dan Meigs,

@DanMeigs'e hoş geldiniz. Bu yöntemi yalnızca bugün cleverlogic.net blogumu düzeltmek için kullandım . Belki Emin sabit WSOD almaya çalışırken çok Whiles okudum çünkü, bu konuda bir makale yazmak gerekir yapmak
Joshua Kissoon

11

Bu kodu index.phpdosyanıza yapıştırın . Boş sayfa yerine hata mesajını gösterir. En azından problemin kökü bilinir. Php etiketinden hemen sonra yapıştırın.

    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);

Umarım size yolu gösterecektir!

http://drupal.org/node/158043


1
Bu işe yaramadı, dün hataları görmeye çalıştım, ama hiçbir şey yazdırmadı
Jayaram

3
Hata günlüğünü kontrol ettin mi? Eğer Linux üzerinde Apache çalıştırıyorsanız, terminalde aşağıdaki komutu deneyin: tail /var/log/apache2/error.log. Bu, o dosyanın en son 10 satırını gösterir.
Charlie Schliesser

Aslında, bana hataları göstermeye başladı .. Aldığım hata: Ölümcül hata: *** / sites / all / module / views / plugins / views_plugin_localization_none.inc dosyasında 100663296 baytlık bellek boyutu tükendi (8192 bayt ayırmaya çalıştı). 1. satırda
Jayaram

1
Bunu eklemek index.phpkötü bir fikirdir (çoğu insan işe yararsa daha sonra kaldırmak üzere tembelleşeceği için geçici olsa da), ayarları doğrudan dosyaya yapıştırmak daha iyidir.
kenorb

10

Boş beyaz ekranın ölüm nedeni, error.php dosyasına aşağıdaki satırları ekleyerek hatayı kontrol etmek için hata bildiriminin kapatılmasıdır:

error_reporting(E_ALL);
$conf['error_level'] = 2;
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

Karşılaştığınız hata için ("XXX baytın izin verilen bellek boyutunun tükenmesi"), aşağıdakileri deneyebilirsiniz:

  1. Önbelleği manuel olarak kesin ve sorunu çözüp çözmediğini kontrol edin (bunu yapmadan önce DB'nizi yedeklemeniz iyi olur):

    Access phpMyAdmin and truncate all tables starting by cache_ from the database.

  2. : Settings.php dosyasında aşağıdaki satırı ekleyerek (yukarıdaki hata temel nedeni modüllerinin kısmi yükleme sebep oldu ve bu soruna neden olan sunucu tarafından bitkin hafıza olduğu gibi) hafıza limitini arttırın ini_set('memory_limit', '-1');
    ekleme ini_set('memory_limit', '-1'); geçersiz kılmaları varsayılan PHP hafıza sınırı.
    Belleği yerine sınırlamak istiyorsanız -1'256M' VEYA '512M' gibi bir bellek boyutu sağlayabilirsiniz.


6

Çok iyi olabilir ki, modüllerinizden birinin hafızası bitiyor olabilir.

Drupal uygulamasının varsayılan ayardan daha fazla bellekle çalışmasına izin vermek için index.php dosyasına bir kod satırı ekleyebilirsiniz:

ini_set('memory_limit','256M');

/Drupal/index.php dosyanızdaki? Php 'den sonra yukarıdaki kodu ekleyin. Her şey yolunda çalışmaya başlarsa, bellek sorununa neyin neden olduğunu belirleyebilirsiniz (büyük olasılıkla bu bir modül).

Bir modülü devre dışı bırakın ve sonra ini_set ('memory_limit', '256M'); ve şimdi yüklenip yüklenmediğine bakın.

İni_set'i bırakmanız önerilmez ('memory_limit', '256M'); bir çözüm olarak kullanılabilir, ancak en azından modül listeleme sayfanıza ulaşmanıza izin verebilir.

Belleği ne kullandığını belirlemek için bir debug_backtrace () yapmayı yararlı bulabilirsiniz .


Bu yardımcı olmadı
Jayaram

Ayrıca, modül listesi sayfasını görebiliyorum, sadece modülleri etkinleştirdiğimde / devre dışı bıraktığımda oluyor, onay sayfasını görmek için tekrar yenilemem gerekecek.
Jayaram

2
İni_set () çağrılarını index.php'ye çağırmak yerine, bir güncelleme sırasında silinecekleri, PHP'de kodlamanız gerekiyorsa, siteye özgü için doğru yer olan settings.php dosyasına koymalısınız. geçersiz kılar.
Alfred Armstrong

Bunu eklemek index.phpkötü bir fikirdir (çoğu insan işe yararsa daha sonra kaldırmak üzere tembelleşeceği için geçici olsa da), ayarları doğrudan dosyaya yapıştırmak daha iyidir.
kenorb

6

Hata:

Önemli hata: İzin verilen X bayt bellek boyutu tükendi (Y bayt ayırmaya çalıştı)

Bayt X'i MB'ye dönüştürmek için 1024 * 1024'e bölün veya Wolfram'da kontrol edin .

PHP, Y baytını ayırmaya çalıştığında gerçekleşir, ancak PHP memory_limityapılandırma ayarları tarafından belirlenen X baytlarında zor bir sınır vardır .

Geçerli sınır, Yönetim »Raporlar» Durum raporu »PHP (URL :) adresine giderek /admin/reports/status/phpveya ini_get('memory_limit')PHP'ye basılarak kontrol edilebilir (limitin, kullanıcı arayüzü ve CLI için farklı olduğuna dikkat edin).

Bunu düzeltmek için kaynak kullanımınızı azaltmanız gerekir, örneğin:

  • şu anda kullanmadığınız geliştirme modüllerini devre dışı bırakmak (önerilen),

    Bu şunları içerir: Devel, Devel Themer (eğer etkinse).

  • kullanmadığınız tüm modülleri devre dışı bırakın,

  • bellek kaynaklarınızı etkileyebilecek bazı hata ayıklama değişkenlerini devre dışı bırakın, örneğin aşağıdakilerle birkaç örnek drush:

    drush -y vset rules_debug 0
    drush -y vset rules_debug_log 0
  • XDebug gibi belirli PHP uzantılarını devre dışı bırakmak,

  • redis / memcached önbellekleri ve bazı PHP önbelleklerini (örn. OPCache / XCache),
  • Sonunda yukarıdakiler yardımcı olmazsa - PHP yapılandırmanızda artışmemory_limit .

Bellek sınırını artırmaya karar verirseniz, index.phpPHP belleğinizi artırmak için PHP kodunu kendinize yapıştırarak çekirdeğinizi hacklemenizi öneren birçok kişi var - asla bunu yapmayın ! Bu çok kötü bir uygulama.

Bunun yerine kodunuzu düzenleyin settings.php(ya settings.local.phpda eklemişseniz) ve aşağıdaki kodu sonuna buraya yapıştırın:

ini_set('memory_limit', '512M');

veya bunu yapmanın daha iyi bir yolu PHP config dosyanızı ( php.ini) düzenlemek ve aşağıdaki satırı değiştirmektir:

memory_limit = 512M  ; Maximum amount of memory a script may consume

Nerede olduğunuzdan emin değilseniz php.ini, şunları kontrol edin:

  • drush status komuta
  • veya atlayarak /admin/reports/status/php.

Hangi sayfaların / bileşenlerin en fazla belleği kullandığını daha fazla araştırmak için aşağıdaki olasılıklara sahipsiniz:

Daha fazla bilgi için kontrol edin:


1
Php UI ve CLI'nın farklı olabileceğini vurgulamak için +1 memory_limit. Bildirilen sorunu drushtam olarak bildiğim için bir hata yaptım, /etc/php/7.0/cli/php.iniancak /etc/php/7.0/cli/php.inigirmedim, bu yüzden drupal UI iyi çalışıyordu. Teşekkürler!
miro marchi

1

Bu bellek sınırını kontrol etmek için bir modül kullanabilirsiniz. PHP Runtime Configurator modülü, php.ini dosyanızı değiştirmeden yapılandırmak ve Apache'yi yeniden başlatmak için birçok seçenek sunar.

Aşağıdaki parametreleri yapılandırabilirsiniz:

  • Dosya Yükleme Sınırı
  • Hafıza sınırı
  • Maksimum Yürütme Süresi Sınırı
  • Maksimum Giriş Değişken Sını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.