Schermo bianco della morte: errore irreversibile: dimensione della memoria consentita di X byte esaurita


21

Ho un problema con la mia installazione di Drupal, ad esempio:

  • quando abilito o disabilito i moduli, mi reindirizza a una pagina vuota,
  • quando creo un nuovo tipo di contenuto e lo salvo, mi reindirizza a una pagina vuota,
  • quando aggiungo una nuova vista e la salvo, mi reindirizza a una pagina vuota,
  • quando provo a svuotare la cache, mi reindirizza a una pagina vuota,
  • o in casi simili.

Fondamentalmente tutte le pagine di conferma mi reindirizzano a una schermata bianca. Quando lo aggiorno di nuovo, mi mostra la pagina. Ho provato ad aumentare il valore della memoria PHP ma non aiuta.

Ci sono altre soluzioni per questo?

L'errore che sto riscontrando:

Errore irreversibile: dimensione della memoria consentita di 100663296 byte esauriti (tentato di allocare 8192 byte) in siti / tutti / moduli / viste / plugins / views_plugin_localization_none.inc sulla riga 1


2
Controlla sempre i log degli errori, avrà tutte le informazioni necessarie. Sembra che nel tuo caso stia esaurendo la memoria. Drupal 7 richiede più di 32 MB che molti provider host impostano come predefinito.
GoodSp33d,

Risposte:


20

So che potrebbe essere tardi, ma mi ha aiutato. La maggior parte delle volte che un modulo causa WSOD, non potevo semplicemente disabilitare i moduli per verificare quale fosse, poiché potrei aver perso i dati nel processo. Quello che ho fatto è stato modificare temporaneamente questa funzione nella directory module.incprincipaleincludes

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;
}

E ho aggiunto quelle 2 dichiarazioni di stampa nel codice sopra, quindi aggiorna la pagina, il modulo che non ha raggiunto l'istruzione "Fine caricamento $ module" è quello con il problema ... è stato sviluppato nel mio caso.

Dopo aver trovato il modulo, puoi andare nella tabella di sistema e cercare quel modulo, impostarne lo stato = 0 e bootstrap = 0 o eseguire la query:

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

Riferimento: Debugging Drupal White Screen of Death (WSOD)


1
L'aggiunta delle istruzioni di stampa a module_invoke_all mi ha permesso di trovare rapidamente il modulo offensivo. Quindi ho usato Drush per disabilitarlo. Che salvavita!
Dan Meigs

Prego @DanMeigs. Ho usato questo metodo solo oggi per correggere il mio blog cleverlogic.net . Forse dovrei scrivere un articolo su questo, perché sicuramente ho letto molto mentre cercavo di riparare il WSOD
Joshua Kissoon

11

Incolla questo codice nel tuo index.phpfile. Ti mostrerà il messaggio di errore invece di una pagina vuota. Almeno la radice del problema può essere conosciuta. Incollalo subito dopo il tag php.

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

Spero che ti mostrerà la strada !.

http://drupal.org/node/158043


1
Non ha funzionato, l'ho provato ieri per vedere gli errori, ma non stampa nulla
Jayaram,

3
Hai controllato il registro degli errori? Se stai usando Apache su Linux, provate questo comando nel terminale: tail /var/log/apache2/error.log. Questo ti mostrerà le 10 righe più recenti di quel file.
Charlie Schliesser,

In realtà, ha iniziato a mostrarmi gli errori. L'errore che ottengo è Errore irreversibile: dimensione della memoria consentita di 100663296 byte esauriti (tentato di allocare 8192 byte) in *** / sites / all / modules / views / plugins / views_plugin_localization_none.inc sulla linea 1
Jayaram il

1
L'aggiunta a questa index.phpè una cattiva idea (anche temporanea, poiché la maggior parte delle persone è pigra per rimuoverla in seguito se funziona), è meglio incollarla direttamente nel file delle impostazioni.
Kenorb,

10

Il motivo della schermata bianca vuota della morte è la segnalazione degli errori disattivata, per controllare l'errore aggiungere le seguenti righe nel file setting.php:

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

Per l'errore che stai riscontrando ("Dimensione della memoria consentita di XXX byte esauriti"), puoi provare le seguenti cose:

  1. Troncare la cache manualmente e verificare se risolve il problema (probabilmente è consigliabile eseguire il backup del DB prima di farlo):

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

  2. Aumenta il limite di memoria (poiché il motivo principale dell'errore sopra riportato è la memoria esaurita dal server che ha causato il caricamento parziale dei moduli e che sta causando il problema) aggiungendo la seguente riga nel file settings.php: ini_set('memory_limit', '-1');
    L'aggiunta ini_set('memory_limit', '-1'); sostituisce il limite di memoria PHP predefinito.
    Se si desidera limitare la memoria anziché anziché -1è possibile fornire dimensioni di memoria come "256 M" O "512 M".


6

Potrebbe benissimo essere che uno dei tuoi moduli stia esaurendo la memoria.

Puoi aggiungere una riga di codice al tuo file index.php per consentire a Drupal di funzionare con più memoria rispetto all'impostazione predefinita:

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

Aggiungi il codice sopra alla riga dopo il? Php nel tuo file /drupal/index.php. Se tutto inizia a funzionare correttamente, puoi identificare la causa del problema di memoria (molto probabilmente è un modulo).

Disabilitare un modulo, quindi commentare ini_set ('memory_limit', '256M'); e vedere se si carica ora.

Non è consigliabile lasciare ini_set ('memory_limit', '256M'); come soluzione, ma può almeno consentire di accedere alla pagina di elenco dei moduli.

Potresti trovare utile fare un debug_backtrace () per determinare cosa stava usando la memoria.


Questo non ha aiutato
Jayaram il

Inoltre, posso vedere la pagina dell'elenco dei moduli, succede solo quando abilito / disabilito i moduli, dovrei aggiornarlo di nuovo per vedere la pagina di conferma.
Jayaram,

2
Invece di mettere le chiamate ini_set () in index.php, dove verranno cancellate da un aggiornamento, se devi codificarle in PHP dovresti inserirle nel tuo file settings.php, che è il posto giusto per il sito specifico sostituzioni.
Alfred Armstrong,

L'aggiunta a questa index.phpè una cattiva idea (anche temporanea, poiché la maggior parte delle persone è pigra per rimuoverla in seguito se funziona), è meglio incollarla direttamente nel file delle impostazioni.
Kenorb,

6

L'errore:

Errore irreversibile: dimensione della memoria consentita di X byte esaurita (tentativo di allocare Y byte)

Per convertire i byte X in MB, dividi per 1024 * 1024 o controlla su Wolfram .

accade quando PHP tenta di allocare Y byte, ma esiste un limite rigido per X byte impostato dalle memory_limitimpostazioni di configurazione di PHP .

Il limite corrente può essere verificato andando su Amministrazione »Rapporti» Rapporto sullo stato »PHP (URL:) /admin/reports/status/phpo stampando ini_get('memory_limit')in PHP (notare che il limite è diverso per UI e CLI).

Per risolverlo, è necessario ridurre l'utilizzo delle risorse, ad esempio:

  • disabilita tutti i moduli di sviluppo che non stai utilizzando attualmente (consigliato),

    Ciò include: Devel, Devel Themer (se abilitato).

  • disabilita tutti i moduli che non stai utilizzando,

  • disabilitare alcune variabili di debug che possono influire sulle risorse di memoria, ad esempio alcuni esempi con drush:

    drush -y vset rules_debug 0
    drush -y vset rules_debug_log 0
  • disabilita determinate estensioni PHP, come XDebug,

  • abilitare le cache redis / memcached e alcune cache PHP (ad esempio OPCache / XCache),
  • infine, se sopra non aiuta, aumenta memory_limitla configurazione di PHP .

Se decidi di aumentare il limite di memoria, molte persone qui consigliano di hackerare il tuo core incollando il codice PHP nel tuo index.phpper aumentare la tua memoria PHP - non farlo mai ! È una brutta pratica.

Invece modifica il tuo settings.php(o settings.local.phpse lo hai incluso) e incolla il seguente codice lì alla fine:

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

o un modo migliore per farlo è modificare il file di configurazione di PHP ( php.ini) e cambiare la seguente riga:

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

Se non sei sicuro di dove ti trovi php.ini, controlla:

  • drush status comando
  • o andando a /admin/reports/status/php.

Per esaminare ulteriormente quali pagine / componenti utilizzano più memoria, hai le seguenti possibilità:

Per ulteriori informazioni, controllare:


1
+1 per sottolineare che l'interfaccia utente e l'interfaccia della riga di comando di php possono avere diverse memory_limit. Ho avuto il problema segnalato solo drushperché avevo un errore /etc/php/7.0/cli/php.inima non in /etc/php/7.0/cli/php.ini, quindi l'interfaccia utente drupal funzionava bene. Grazie!
miro marchi,

1

È possibile utilizzare un modulo per controllare questo limite di memoria. Il modulo PHP Runtime Configurator offre molte opzioni per configurare senza modificare il file php.ini e riavviare Apache.

È possibile configurare i seguenti parametri:

  • Limite caricamento file
  • Limite di memoria
  • Limite massimo di esecuzione
  • Limite massimo di input input

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.