L'ultima volta ho anche battuto la testa contro un muro con problemi di memoria di Drupal. Ecco le mie conoscenze raccolte sull'argomento:
1. Le viste (possono) usare molta memoria
Mi piacciono alcune Viste (e Pannelli e CTools e tutto ciò che merlinofchaos tocca con le sue dita potenti e potenti), ma è possibile creare configurazioni con relazioni multiple che usano molta memoria. Se si disabilitano le viste e il problema di memoria scompare, è probabile che sia una vista mal costruita a causare il problema.
Cosa fare se si tratta di una vista e hai davvero bisogno di quella vista per funzionare? Prova a inserirlo nel codice (tramite Bulk Exporter o Features; vedi sotto. Ho codificato a mano le funzionalità simili a Views per migliorare le prestazioni con scarso successo) per iniziare. Un altro pensiero è quello di ripetere la vista in un modo diverso: se alla fine ciò che si ottiene è termini di tassonomia, assicurarsi che il tipo di vista sia una vista di tassonomia quando la si crea; non creare una visualizzazione contenuto che utilizza le relazioni per ottenere in termini di tassonomia.
Potrebbe anche valere la pena menzionare qui che presumibilmente anche i pannelli utilizzano molta memoria - non l'ho mai testato, quindi non posso confermarlo.
2. Il trasferimento di elementi dal database al codice è un'ottima pratica
Mi ci sono voluti diversi siti Drupal per rendermene conto, ma mantenere tutto ciò che è stato creato tramite un'interfaccia utente nel database (in particolare le configurazioni di Viste e pannelli) è la peggiore pratica di Drupal. Perché? Aumenta il carico sul database e non può essere controllato in base alla versione. Il primo punto è particolarmente problematico in termini di utilizzo della memoria: invece di caricare il contenuto dalla vista dal database, il sito deve anche caricare i componenti della vista stessa. Ciò è esacerbato dal modo in cui Drupal utilizza le tabelle: astrattando tutto all'ennesima potenza, ogni bit della funzionalità di Drupal utilizza una nuova tabella, risultando in alcune richieste che uniscono un bajillion di tabelle. Questo dà alle ernie delle persone di Informatica (avvertenza: il collegamento è stupido), ma non può davvero essere evitato con un software modulare e intuitivo come Drupal.
La soluzione? Utilizzare Bulk Exporter (incluso con CTools) o Funzionalità per impacchettare bit di codice attualmente presenti nel database come codice del modulo.
3. I temi possono anche mangiare memoria
Il tuo tema ha molti file modello (ovvero file nel nome file / modelli /)? In tal caso, la memoria viene consumata ogni volta che viene caricato uno di quei file. Se stai creando modelli specifici per sopprimere la visualizzazione di bit di Drupal, prova:
- Modifica delle autorizzazioni in modo che il bit non venga visualizzato per ruoli utente non amministratori specifici.
- Utilizzo dei CSS per nascondere elementi.
La prima scelta è ovviamente quello che vuoi fare per cose che incidono sulla sicurezza: non vuoi usare i CSS per nascondere un pulsante "modifica" per determinati utenti, solo per averli e poi scoprirli tramite Firebug o altro.
4. Non esagerare con i moduli contrib
Mentre a volte un sito ha bisogno di molti moduli contrib, non esagerare. Ogni modulo abilitato (nota: abilitato. I moduli disabilitati non usano alcuna memoria) usa la memoria. Questo è un po 'ovvio, ma vale la pena notare a prescindere.
5. Il VPS è (a volte) una bugia
Nella mia esperienza, alcune società di hosting senza scrupoli amano provare a spingere i siti Drupal sui server VPS: sono più costosi e liberano spazio di hosting condiviso per sempre più siti Web WordPress. La situazione è aggravata dal fatto che i webhost spesso non pubblicizzano (o addirittura ti dicono volentieri se richiesto) quale sia il limite massimo di memoria per l'hosting condiviso.
Purtroppo, spesso se un sito non è sotto intenso traffico ed è ancora in crash, il problema probabilmente ha qualcosa a che fare con la configurazione di Drupal di ogni altra cosa. Il push di un utente su VPS confonde le acque e aggiunge più variabili da affrontare (è la configurazione del server web? Configurazione PHP? Configurazione ospite VPS? Configurazione host VPS, anche?).
6. Quando tutto il resto fallisce, clona su localhost e battilo con un bastone
Questo è un grande motivo per cui le persone usano la metodologia dev-staging-production con controllo di versione: quando tutto il resto fallisce, puoi fare un dump del DB, git clonare il sito su un server di test locale e quindi rovinare regalmente il sito sul test del server senza preoccuparsi di interrompere effettivamente qualcosa sul server di produzione.
Per problemi di memoria, ciò significa generalmente disabilitare i moduli uno a uno fino a quando non viene esposto quello che causa il problema. Può anche indicare problemi relativi al webhost - se il sito funziona perfettamente su un'installazione locale con memoria impostata su qualcosa di ragionevole come 128 MB, allora sai che il tuo webhost è in crisi.
tl; dr
Il mio istinto è che è chain_menu_access a causare il problema. Prova a disabilitarlo e a svuotare la cache, vedi se funziona.
Aggiungerò anche a questa risposta mentre penso ad altre cose da provare ...