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
Antworten:
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:
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 ...
quelle
file_scan_directory
wie sie sind. Ich werde ein paar Sachen ausprobieren, um dies zu bestätigen.system
Tabelle hinzu. C. Lädt alle Module mit den Feldeinträgen system.status auf1
. Wenn jemand dies bestätigen oder widerlegen kann, würde ich es begrüßen.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.
quelle
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.
quelle
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.
quelle