Das Erhöhen des Speicherlimits hilft bei schwerwiegenden Fehlern nicht: Zulässige Speichergröße von… / modules / views / views.module in Zeile 416

11

Ich habe vor drei Wochen von Drupal 7.14 auf 7.15 gewechselt und stoße daher auf eine Reihe sehr ausgefeilter (für mich) Speicherlimitfehler . Diese Fehler treten jedes Mal auf, wenn ich versuche, den Cache in der Leistung zu leeren oder Aktualisierungsskripte auszuführen.

Mein Hosting-Unternehmen hat mein Speicherlimit in php.ini auf 126 M, 256 M, 512 M und sogar 1024 M erhöht. Die Fehler treten jedoch weiterhin auf. Ich habe meine Site von Shared auf VPS migriert, aber der Fehler tritt immer noch unglaublich auf. Ich habe keine Möglichkeit und keine Ahnung, wie ich vorankommen soll.

Hier sind die Fehler:

  • Schwerwiegender Fehler: Zulässige Speichergröße von 536870912 Byte erschöpft (versucht, 30 Byte zuzuweisen) in /home/example/public_html/sites/all/modules/views/views.module in Zeile 416
  • Schwerwiegender Fehler: Zulässige Speichergröße von 536870912 Byte erschöpft (versucht, 108 Byte zuzuweisen) in /home/example/public_html/includes/menu.inc in Zeile 2736

  • Schwerwiegender Fehler: Zulässige Speichergröße von 536870912 Byte erschöpft (versucht, 71 Byte zuzuweisen) in /home/example/public_html/sites/all/modules/chain_menu_access/chain_menu_access.module in Zeile 59

  • 64 Bytes zuweisen) in /home/example/public_html/sites/all/modules/views/includes/base.inc in Zeile 93

Salift
quelle
Was ist Ihr Spitzenverkehr (Seiten / Sekunde)? Wie viele Daten (Knoten?) Versucht die Ansicht, zurückzurufen?
Cherouvim
ähnliche Diskussion auf drupal.org drupal.org/node/76156
Anoop Joseph
2
Haben Sie zufällig eine Ansicht, die eine große Anzahl von Ergebnissen zurückgibt und für das Format Inhalte anstelle von Feldern lädt? Ich habe diese Behinderung schon oft gesehen.
Jepedo
Hallo Leute! Vielen Dank für Ihre Antworten. Ich möchte sagen, dass sich die Website im Wartungsmodus befindet und nur wenige Inhalte (Knoten) zu Testzwecken enthält. Die Site wird nur von Crawlern besucht. Wie ich in meinem Beitrag erwähnt habe, hat die in node drupal.org/node/76156 vorgeschlagene Erhöhung des Speicherlimits in der php.ini-Lösung in meinem Fall nicht geholfen. Für Ansichten, in denen Inhalte anstelle von Feldern geladen werden. Ich möchte herausfinden, wie
Salift
1
Haben Sie versucht, wieder auf Drupal 7.14 umzusteigen? Wenn ein Upgrade auf Drupal 7.15 dieses Problem verursacht hat, warum nicht versuchen, zurückzuschalten? Meine Vermutung ist, dass es in einem Ihrer Module eine unendliche Rekursion gibt. Was sind Ihre Views-bezogenen Module?
Johnathan Elmore

Antworten:

13

Ich habe auch das letzte Mal meinen Kopf gegen eine Wand geschlagen, während ich Probleme mit dem Drupal-Gedächtnis hatte. Hier ist mein gesammeltes Wissen zum Thema:

1. Ansichten (können) viel Speicher verbrauchen

Ich liebe einige Ansichten (und Panels und CTools und alles, was Merlinofchaos mit seinen mächtigen, mächtigen Fingern berührt), aber es ist möglich, Konfigurationen mit mehreren Beziehungen zu erstellen, die viel Speicher verbrauchen. Wenn Sie Ihre Ansichten deaktivieren und das Speicherproblem behoben wird, ist es wahrscheinlich eine schlecht konstruierte Ansicht, die das Problem verursacht.

Was tun, wenn es sich um eine Ansicht handelt und Sie diese Ansicht wirklich benötigen, um zu funktionieren? Versuchen Sie zunächst, es in Code einzufügen (über Bulk Exporter oder Features; siehe unten. Ich habe Ansichten-ähnliche Funktionen von Hand codiert, um die Leistung mit sehr geringem Erfolg zu verbessern). Ein anderer Gedanke ist, die Ansicht auf eine andere Weise zu wiederholen. Wenn es sich letztendlich um Taxonomiebegriffe handelt, stellen Sie beim Erstellen sicher, dass der Ansichtstyp eine Taxonomieansicht ist. Erstellen Sie keine Inhaltsansicht, die Beziehungen verwendet, um Taxonomiebegriffe zu erhalten.

Könnte auch erwähnenswert sein, dass Panels angeblich auch viel Speicher verbrauchen - ich habe es nicht wirklich bewertet, kann es also nicht bestätigen.

2. Das Verschieben von Daten aus der Datenbank in den Code ist eine sehr gute Vorgehensweise

Ich habe mehrere Drupal-Sites benötigt, um dies zu realisieren, aber alles, was über eine Benutzeroberfläche erstellt wurde, in der Datenbank zu behalten (insbesondere Ansichten- und Bedienfeldkonfigurationen), ist eine Drupal-Praxis. Warum? Es erhöht die Belastung der Datenbank und kann nicht versioniert werden. Der erste Punkt ist besonders problematisch in Bezug auf die Speichernutzung. Anstatt nur den Inhalt aus der Ansicht aus der Datenbank zu laden, muss die Site auch die Ansichtskomponenten selbst laden. Dies wird durch die Verwendung von Tabellen durch Drupal noch verschärft: Indem alles bis zum n-ten Grad abstrahiert wird, verwendet jedes Bit der Drupal-Funktionalität eine neue Tabelle, was dazu führt, dass einige Anforderungen eine Bajillion von Tabellen zusammenfügen. Dies führt zu Hernien in der Informatik (Einschränkung: Link ist albern), kann jedoch mit einer so modularen und benutzerfreundlichen Software wie Drupal nicht wirklich vermieden werden.

Die Lösung? Verwenden Sie Bulk Exporter (im Lieferumfang von CTools enthalten) oder Features , um Code-Bits, die sich derzeit in der Datenbank befinden, als Modulcode zu verpacken.

3. Themen können auch Erinnerung fressen

Hat Ihr Thema viele Vorlagendateien (dh Dateien im Benutzernamen / templates /)? In diesem Fall wird jedes Mal Speicher belegt, wenn eine dieser Dateien geladen wird. Wenn Sie Vorlagen speziell erstellen, um zu verhindern, dass Drupal-Teile angezeigt werden, versuchen Sie Folgendes:

  1. Ändern der Berechtigungen, sodass das Bit für bestimmte Nicht-Administrator-Benutzerrollen nicht angezeigt wird.
  2. Verwenden von CSS zum Ausblenden von Elementen.

Die erste Wahl ist natürlich, was Sie für sicherheitsrelevante Dinge tun möchten - Sie möchten CSS nicht verwenden, um eine Schaltfläche "Bearbeiten" für bestimmte Benutzer auszublenden, nur um sie dann über Firebug oder was auch immer ausblenden zu lassen.

4. Gehen Sie bei Contrib-Modulen nicht über Bord

Während eine Site manchmal viele Contrib-Module benötigt, gehen Sie nicht über Bord. Jedes aktivierte (Hinweis: aktiviert. Deaktivierte Module verwenden keinen Speicher) Modul verwendet Speicher. Dies ist ein bisschen offensichtlich, aber trotzdem erwähnenswert.

5. Der VPS ist (manchmal) eine Lüge

Nach meiner Erfahrung einige skrupellose Hosting-Unternehmen versuchen gerne, Drupal-Websites auf VPS-Server zu übertragen - sie sind teurer und geben gemeinsam genutzten Hosting-Speicherplatz für immer mehr WordPress-Websites frei. Die Situation wird durch die Tatsache verschlechtert, dass Webhosts häufig nicht für die obere Speichergrenze für Shared Hosting werben (oder Ihnen sogar gerne mitteilen, wenn Sie dazu aufgefordert werden).

Leider hat das Problem häufig mehr mit der Konfiguration von Drupal zu tun als mit irgendetwas anderem, wenn eine Site nicht stark frequentiert ist und immer noch abstürzt. Wenn Sie einen Benutzer zu VPS schieben, wird das Wasser nur trübe und es werden weitere Variablen hinzugefügt (Ist dies die Webserver-Konfiguration? PHP-Konfiguration? VPS-Gastkonfiguration? VPS-Host-Konfiguration sogar?).

6. Wenn alles andere fehlschlägt, klonen Sie auf localhost und schlagen Sie es mit einem Stock

Dies ist ein wichtiger Grund, warum Benutzer die Dev-Staging-Produktionsmethode mit Versionskontrolle verwenden. Wenn alles andere fehlschlägt, können Sie einen DB-Dump durchführen, die Site auf einen lokalen Testserver klonen und die Site dann auf königliche Weise durcheinander bringen Testen des Servers, ohne sich Gedanken darüber zu machen, ob tatsächlich etwas auf dem Produktionsserver kaputt geht.

Bei Speicherproblemen bedeutet dies im Allgemeinen, dass die Module einzeln deaktiviert werden, bis das Problem angezeigt wird. Es kann auch auf Probleme im Zusammenhang mit Webhosts hinweisen. Wenn die Site bei einer lokalen Installation mit einem auf 128 MB vernünftigen Speicher einwandfrei funktioniert, wissen Sie, dass Ihr Webhost in Gefahr ist.

tl; dr

Mein Bauch ist, dass es chain_menu_access ist, der das Problem verursacht. Deaktivieren Sie das und leeren Sie den Cache. Überprüfen Sie, ob es funktioniert.

Ich werde diese Antwort auch ergänzen, wenn ich an andere Dinge denke, die ich ausprobieren möchte ...

aendrew
quelle
... und genau darauf habe ich gehofft, als ich diese Frage mit einem Kopfgeld belohnt habe! Besonders 2. 110 Wiederholungen an Sie, guter Herr :) Hoffentlich zieht dies einige nützliche Kommentare von anderen mit etwas anderen Erfahrungen an
user56reinstatemonica8
ps Ich habe an verschiedenen Stellen gehört, dass selbst deaktivierte Module beim Parsen der Dateien eine bestimmte Menge an Speicher belegen. Ich habe Leute sagen sehen, dass alle PHP / Inc-Dateien auf irgendeine Weise analysiert werden, obwohl das nicht richtig scheint (wahrscheinlicher nur die Info-Dateien). Irgendeine Idee, ob das wahr ist?
user56reinstatemonica8
Cool, danke! Ich bin mir ziemlich sicher, dass Drupal beim Laden von Dateien ziemlich speicherbewusst ist. Wenn Sie XHProf ausführen, ist die Anzahl der Aufrufe so groß, file_scan_directorywie sie sind. Ich werde ein paar Sachen ausprobieren, um dies zu bestätigen.
Aendrew
Wenn deaktivierte Module Speicher verwenden, ist dies ziemlich unwesentlich. Ich habe mir angesehen, wie viel Speicher von Devel vor und nach dem Löschen eines Moduls gemeldet wurde. Während die Seitenaktualisierung nach dem Entfernen der Dateien einen kleinen Anstieg (<1 MB) aufwies, kehrte sie bei der nächsten Aktualisierung genau zu den Werten vor dem Löschen zurück. Dies lässt mich glauben, dass Drupal a. Durchsucht das Modulverzeichnis beim Booten, um festzustellen, ob neue .info-Dateien vorhanden sind. B. Fügt die Details des Moduls zu seiner systemTabelle hinzu. C. Lädt alle Module mit den Feldeinträgen system.status auf 1. Wenn jemand dies bestätigen oder widerlegen kann, würde ich es begrüßen.
Aendrew
2

Sie können versuchen, einen PHP-Profiler wie XHProf oder den in Xdebug integrierten Profiler zu verwenden, um zu überprüfen, was in der Anforderung geschieht.

bmhaskar
quelle
Sobald Sie herausgefunden haben, welche Teile besonders viel Speicher benötigen, haben Sie Schritt 1 ausgeführt. In Schritt 2 wird versucht, tatsächlich zu verstehen, warum so viel Speicher verwendet wird und wie dieser reduziert werden kann. Die oben genannten Personen sprechen über viele Elemente im Ergebnis usw. Im Allgemeinen ist dies ein Prozess, der nicht einfach beschrieben werden kann.
Daniel Wehner
1

Views ist ein Gedächtnisfresser. Drupals Caching kann helfen. Drupal lädt jedoch nur aktive Module, wenn sie Tabellen erstellen oder andere Objekte haben, die herumhängen können. Nur durch Deinstallation werden die meisten Artefakte entfernt. Wir verwenden die Berechtigungen / Berechtigungen von drupal und schreiben unsere eigenen Module hinein. Nicht die beste, aber die Leistung ist viel besser und einfacher einzustellen. Das Gleiche machen wir auch für WP.

CharlieH
quelle
0

In meinem Fall wurde das Problem mit dem Speicherlimit vom Cache-System (Boost- und Boost Expire-Module) generiert. Dies gibt mir Probleme beim Aktualisieren von Modulen oder Ansichten. Einmal deaktiviert Boost-Module funktionieren alle einwandfrei.

Commodoreforce
quelle