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:
- Ändern der Berechtigungen, sodass das Bit für bestimmte Nicht-Administrator-Benutzerrollen nicht angezeigt wird.
- 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 ...