Aumentare il limite di memoria non aiuta in errore irreversibile: dimensione della memoria consentita di ... / moduli / viste / viste. Modulo sulla linea 416


11

Sono passato da Drupal 7.14 a 7.15 tre settimane fa e quindi sto riscontrando una serie di errori di limite di memoria molto sofisticati (per me) . Questi errori si verificano ogni volta che sto cercando di svuotare la cache in termini di prestazioni o di eseguire script di aggiornamento.

La mia società di hosting ha aumentato il mio limite di memoria in php.ini fino a 126 M, 256 M, 512 M e persino 1024 M. Ma gli errori si verificano ancora. Ho migrato il mio sito da condiviso a VPS, ma l'errore si verifica ancora incredibilmente. Non ho modo e non ho idea di come andare avanti.

Ecco gli errori:

  • Errore irreversibile: dimensione della memoria consentita di 536870912 byte esauriti (tentato di allocare 30 byte) in /home/example/public_html/sites/all/modules/views/views.module sulla riga 416
  • Errore irreversibile: dimensione della memoria consentita di 536870912 byte esauriti (tentato di allocare 108 byte) in /home/example/public_html/includes/menu.inc sulla riga 2736

  • Errore irreversibile: dimensione della memoria consentita di 536870912 byte esauriti (tentativo di allocare 71 byte) in /home/example/public_html/sites/all/modules/chain_menu_access/chain_menu_access.module sulla riga 59

  • allocare 64 byte) in /home/example/public_html/sites/all/modules/views/includes/base.inc sulla riga 93


Qual è il tuo picco di traffico (pagine / secondo). Inoltre, quanti dati (nodi?) Restituisce la vista?
Cherouvim,

discussione simile su drupal.org drupal.org/node/76156
Anoop Joseph,

2
Per caso hai una vista che restituisce un gran numero di risultati e per il formato carica il contenuto anziché i campi? Ho visto questa prestazione di ostacolo molte volte prima.
Jepedo,

Ciao ragazzi! Grazie mille per le tue risposte. Voglio dire che il sito Web è in modalità di manutenzione e contiene solo una piccola quantità di contenuto (nodi) a scopo di test. Il sito è visitato solo dai crawler Come ho già detto nel mio post, l'aumento del limite di memoria nella soluzione php.ini suggerito nel nodo drupal.org/node/76156 non ha aiutato nel mio caso. Per le viste che caricano il contenuto anziché il campo. Voglio capire come
salift l'

1
Hai provato a tornare a Drupal 7.14? Se l'aggiornamento a Drupal 7.15 ha causato questo problema, perché non provare a tornare indietro? La mia impressione è che ci sia una ricorsione infinita in uno dei tuoi moduli. Quali sono i tuoi moduli relativi a Views?
Johnathan Elmore,

Risposte:


13

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:

  1. Modifica delle autorizzazioni in modo che il bit non venga visualizzato per ruoli utente non amministratori specifici.
  2. 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 ...


... e questo è esattamente il tipo di cosa che speravo quando ho messo una taglia su questa domanda! Soprattutto 2. 110 rappresentanti a voi, buon signore :) Spero che questo possa attirare alcuni commenti utili anche da altri con esperienze leggermente diverse
user56reinstatemonica8

ps Ho sentito in vari posti che anche i moduli disabilitati usano una certa quantità di memoria per analizzare i file. Ho visto persone dire che tutti i file php / inc vengono analizzati in qualche modo, anche se ciò non sembra giusto (più probabilmente solo i file di informazioni). Qualche idea se c'è qualcosa di vero in questo?
user56reinstatemonica8

Figo, grazie! Sono abbastanza sicuro che la memoria di Drupal sia abbastanza coscienziosa quando si caricano i file - se si esegue XHProf, il numero di chiamate per file_scan_directoryutilizzare abbastanza memoria così com'è. Proverò alcune cose con questo sviluppo dopo per confermarlo, però.
Annunciato il

Se i moduli disabilitati usano qualsiasi memoria, è abbastanza privo di sostanza. Ho esaminato la quantità di memoria segnalata da Devel prima e dopo aver eliminato un modulo - mentre l'aggiornamento della pagina dopo la rimozione dei file mostrava un piccolo picco (<1 MB), quindi è tornato esattamente ai valori di pre-cancellazione al successivo aggiornamento. Questo mi porta a credere che Drupal a. Esegue la scansione della directory dei moduli all'avvio per vedere se ci sono nuovi file .info b. Aggiunge i dettagli del modulo alla sua systemtabella c. Carica tutti i moduli con voci di campo system.status impostate su 1. Se qualcuno può confermare o confutare questo, lo apprezzerei.
Annunciato il

2

Puoi provare a inserire un profiler PHP come XHProf o il profiler incorporato di Xdebug per ispezionare ciò che sta accadendo nella richiesta.


Una volta capito quali parti necessitano in particolare della quantità di memoria che hai fatto il passaggio 1. Il passaggio 2 consiste nel cercare effettivamente di capire perché sta usando tanta memoria e come ridurla. Sopra le persone parlano di molti elementi del risultato, ecc. In generale questo è un processo che non può essere semplice da descrivere.
Daniel Wehner,

1

Views è un porco di memoria. La memorizzazione nella cache di Drupal può aiutare. Drupal carica i moduli attivi solo se creano tabelle o hanno altri oggetti che possono essere appesi. Solo la disinstallazione rimuoverà la maggior parte degli artefatti. Usiamo l'autorizzazione / le autorizzazioni di drupal e scriviamo i nostri moduli all'interno. Non il migliore, ma le prestazioni sono molto migliori e più facili da regolare. Facciamo lo stesso anche per WP.


0

Nel mio caso il problema del limite di memoria è stato generato dal sistema di cache (moduli Boost e Boost Expire). Questo mi dà problemi per aggiornare il modulo o le viste. Una volta disabilitati, i moduli Boost funzionano tutti bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.