Weißer Bildschirm des Todes: Schwerwiegender Fehler: Zulässige Speichergröße von X Byte erschöpft

21

Ich habe ein Problem mit meiner Drupal-Installation, zum Beispiel:

  • Wenn ich die Module aktiviere oder deaktiviere, leitet es mich auf eine leere Seite weiter.
  • Wenn ich einen neuen Inhaltstyp erstelle und speichere, leite ich ihn auf eine leere Seite weiter.
  • Wenn ich eine neue Ansicht hinzufüge und speichere, werde ich auf eine leere Seite weitergeleitet.
  • Wenn ich versuche, den Cache zu leeren, werde ich auf eine leere Seite zurückgeleitet.
  • oder in ähnlichen Fällen.

Grundsätzlich leiten mich alle Bestätigungsseiten auf einen weißen Bildschirm um. Wenn ich es erneut aktualisiere, wird die Seite angezeigt. Ich habe versucht, den PHP-Speicherwert zu erhöhen, aber es hilft nicht.

Gibt es noch andere Lösungen dafür?

Der Fehler, den ich habe:

Schwerwiegender Fehler: Die zulässige Speichergröße von 100663296 Byte ist erschöpft (es wurde versucht, 8192 Byte zuzuweisen) in sites / all / modules / views / plugins / views_plugin_localization_none.inc in Zeile 1

Jayaram
quelle
2
Überprüfen Sie immer die Fehlerprotokolle, sie enthalten alle erforderlichen Informationen. Klingt so, als ob Ihnen in Ihrem Fall der Speicher ausgeht. Drupal 7 erfordert mehr als 32 MB, was von vielen Host-Anbietern als Standard festgelegt wird.
GoodSp33d

Antworten:

20

Ich weiß, dass es vielleicht zu spät ist, aber es hat mir geholfen. In den meisten Fällen, in denen ein Modul WSOD verursacht, konnte ich die Module nicht einfach deaktivieren, um zu testen, um welche es sich handelt, da ich möglicherweise Daten verloren habe. Was ich tat , war vorübergehend diese Funktion in bearbeiten module.inc, im includesKernverzeichnis

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

Und ich habe diese 2 print-Anweisungen in den obigen Code eingefügt und dann die Seite aktualisiert. Das Modul, das die Anweisung "Lade das $ -Modul abschließen" nicht erreicht hat, ist das mit dem Problem ... es wurde in meinem Fall entwickelt.

Nachdem Sie das Modul gefunden haben, können Sie in die Systemtabelle gehen und nach diesem Modul suchen, dessen Status auf 0 und Bootstrap auf 0 setzen oder die Abfrage ausführen:

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

Referenz: Debuggen von Drupal White Screen of Death (WSOD)

Joshua Kissoon
quelle
1
Durch Hinzufügen der print-Anweisungen zu module_invoke_all konnte ich das fehlerhafte Modul schnell finden. Dann habe ich drush verwendet, um es zu deaktivieren. Was für ein Lebensretter!
Dan Meigs
Gern geschehen bei DanMeigs. Ich habe diese Methode nur heute verwendet, um mein Blog cleverlogic.net zu reparieren . Vielleicht sollte ich einen Artikel darüber schreiben, denn ich habe sicher eine Menge gelesen, während ich versuchte, die WSOD zu reparieren
Joshua Kissoon,
11

Fügen Sie diesen Code in Ihre index.phpDatei ein. Es wird Ihnen die Fehlermeldung anstelle einer leeren Seite angezeigt. Zumindest die Ursache des Problems ist bekannt. Fügen Sie es direkt nach dem PHP-Tag ein.

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

Ich hoffe, es zeigt Ihnen den Weg !.

http://drupal.org/node/158043

Sandesh Yadav
quelle
1
Das hat nicht funktioniert, ich habe das gestern versucht, um die Fehler zu sehen, aber es gibt nichts aus
Jayaram
3
Haben Sie Ihr Fehlerprotokoll überprüft? Wenn Sie Apache auf Linux laufen lassen , versuchen Sie diesen Befehl im Terminal: tail /var/log/apache2/error.log. Das zeigt Ihnen die 10 letzten Zeilen dieser Datei.
Charlie Schliesser
Tatsächlich wurden mir die Fehler angezeigt. Der Fehler, den ich erhalte, ist ein schwerwiegender Fehler: Die zulässige Speichergröße von 100663296 Byte ist erschöpft (es wurde versucht, 8192 Byte zuzuweisen) in *** / sites / all / modules / views / plugins / views_plugin_localization_none.inc Online 1
Jayaram
1
Dies hinzuzufügen index.phpist eine schlechte Idee (auch vorübergehend, da die meisten Leute zu faul sind, es später zu entfernen, wenn dies funktioniert), ist es besser, es direkt in Ihre Einstellungsdatei einzufügen.
Kenorb
10

Grund für den leeren weißen Bildschirm des Todes ist die deaktivierte Fehlerberichterstattung. Um den Fehler zu überprüfen, fügen Sie die folgenden Zeilen in Ihre setting.php-Datei ein:

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

Für den Fehler ("Erlaubte Speichergröße von XXX Bytes erschöpft") können Sie die folgenden Dinge versuchen:

  1. Kürzen Sie den Cache manuell und prüfen Sie, ob das Problem dadurch behoben wird (es ist wahrscheinlich eine gute Idee, vorher eine Sicherungskopie Ihrer Datenbank zu erstellen):

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

  2. Erhöhen Sie das Speicherlimit (der Hauptgrund für den oben genannten Fehler ist der vom Server beanspruchte Speicher, der das teilweise Laden der Module verursacht hat und das das Problem verursacht), indem Sie die folgende Zeile in Ihre settings.php-Datei ini_set('memory_limit', '-1');
    einfügen : Durch ini_set('memory_limit', '-1'); das Hinzufügen wird das überschrieben Standard-PHP-Speicherlimit.
    Wenn Sie den Speicher einschränken möchten, -1können Sie stattdessen eine Speichergröße wie '256M' ODER '512M' angeben.

Ankit Agrawal
quelle
6

Es kann sehr gut sein, dass einem Ihrer Module der Speicher ausgeht.

Sie können Ihrer index.php-Datei eine Codezeile hinzufügen, damit Drupal mit mehr Speicher als der Standardeinstellung ausgeführt werden kann:

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

Fügen Sie den obigen Code in die Zeile nach dem? Php in Ihrer /drupal/index.php-Datei ein. Wenn alles gut funktioniert, können Sie feststellen, was das Speicherproblem verursacht (höchstwahrscheinlich ein Modul).

Deaktivieren Sie ein Modul und kommentieren Sie das ini_set ('memory_limit', '256M') aus. und sehen, ob es jetzt geladen wird.

Es wird nicht empfohlen, das ini_set ('memory_limit', '256M') zu belassen. als Lösung vorhanden, aber es kann Ihnen zumindest ermöglichen, zu Ihrer Modullistenseite zu gelangen.

Es kann hilfreich sein, debug_backtrace () auszuführen, um festzustellen, was den Speicher verwendet hat.

Johnathan Elmore
quelle
Dies hat nicht geholfen
Jayaram
Außerdem kann ich die Seite mit der Modulliste sehen. Dies passiert nur, wenn ich Module aktiviere / deaktiviere. Ich müsste sie erneut aktualisieren, um die Bestätigungsseite zu sehen.
Jayaram
2
Anstatt ini_set () -Aufrufe in index.php zu platzieren, wo sie bei einem Update gelöscht werden, sollten Sie sie, wenn Sie sie in PHP codieren müssen, in Ihre settings.php-Datei einfügen, die der richtige Ort für bestimmte Sites ist überschreibt.
Alfred Armstrong
Dies hinzuzufügen index.phpist eine schlechte Idee (auch vorübergehend, da die meisten Leute zu faul sind, es später zu entfernen, wenn dies funktioniert), ist es besser, es direkt in Ihre Einstellungsdatei einzufügen.
Kenorb
6

Der Fehler:

Schwerwiegender Fehler: Zulässige Speichergröße von X Bytes erschöpft (versucht, Y Bytes zuzuweisen)

Um Bytes X in MB umzuwandeln, dividieren Sie durch 1024 * 1024 oder überprüfen Sie bei Wolfram .

passiert, wenn PHP versucht, Y-Bytes zuzuweisen, aber es gibt ein festes Limit für X-Bytes, das durch die PHP- memory_limitKonfigurationseinstellungen festgelegt wird.

Das aktuelle Limit kann unter Administration »Berichte» Statusbericht »PHP (URL:) /admin/reports/status/phpoder durch Drucken ini_get('memory_limit')in PHP überprüft werden (beachten Sie, dass das Limit für Benutzeroberfläche und CLI unterschiedlich ist).

Um dies zu beheben, müssen Sie den Ressourcenverbrauch senken, zum Beispiel:

  • Deaktivieren Sie alle Entwicklungsmodule, die Sie derzeit nicht verwenden (empfohlen).

    Dies beinhaltet: Devel, Devel Themer (falls aktiviert).

  • Deaktivieren Sie alle Module, die Sie nicht verwenden,

  • Deaktivieren Sie bestimmte Debug-Variablen, die sich auf Ihre Speicherressourcen auswirken können, z. B. einige Beispiele mit drush:

    drush -y vset rules_debug 0
    drush -y vset rules_debug_log 0
  • Deaktivieren Sie bestimmte PHP-Erweiterungen wie XDebug,

  • Redis / Memcached Caches und einige PHP Caches (zB OPCache / XCache) aktivieren,
  • Wenn dies nicht hilft, erhöhen Sie memory_limitIhre PHP-Konfiguration .

Wenn Sie sich für eine Erhöhung des Speicherlimits entscheiden, raten viele Leute hier, Ihren Kern tatsächlich zu hacken, indem Sie den PHP-Code in Ihren Code einfügen index.php, um Ihren PHP-Speicher zu vergrößern - tun Sie das niemals ! Es ist eine sehr schlechte Praxis.

Bearbeiten Sie stattdessen Ihren Code settings.php(oder settings.local.phpfalls vorhanden) und fügen Sie dort am Ende den folgenden Code ein:

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

Eine bessere Möglichkeit besteht darin, die PHP-Konfigurationsdatei ( php.ini) zu bearbeiten und die folgende Zeile zu ändern:

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

Wenn Sie sich nicht sicher sind, wo Sie sich befinden php.ini, gehen Sie folgendermaßen vor:

  • drush status Befehl
  • oder indem Sie an gehen /admin/reports/status/php.

Um weiter zu untersuchen, welche Seiten / Komponenten den meisten Speicher belegen, haben Sie folgende Möglichkeiten:

Weitere Informationen finden Sie unter:

Kenorb
quelle
1
+1 für die Betonung, dass PHP UI und CLI unterschiedlich sein können memory_limit. Ich hatte das gemeldete Problem nur mit drushgenau, weil ich einen Fehler in hatte, /etc/php/7.0/cli/php.iniaber nicht in /etc/php/7.0/cli/php.ini, so funktionierte Drupal UI gut. Vielen Dank!
miro marchi
1

Sie können ein Modul verwenden, um dieses Speicherlimit zu steuern. Das PHP Runtime Configurator- Modul bietet viele Konfigurationsmöglichkeiten, ohne die php.ini-Datei zu ändern und Apache neu zu starten.

Sie können folgende Parameter konfigurieren:

  • Datei-Upload-Limit
  • Speicherlimit
  • Maximales Ausführungszeitlimit
  • Maximale Eingangsvariablengrenze

Sahil Gupta
quelle