Drupal (6.19) cron esaurisce la memory durante l'indexing della ricerca

La mia installazione Drupal 6.19 è in esecuzione da circa sei mesi. Il cliente ha utilizzato triggersmente la pubblicazione di più contenuti.

Tuttavia, qualcosa è successo, perché ora il cronjob non finisce.

Errore irreversibile: size di memory consentite di 134217728 byte esaurite (tentato di allocare 36230464 byte) in /XXX/modules/search/search.module sulla row 444

Come vedi, ho un limite di memory di 128M in PHP.ini e search.module sta tentando di allocare una quantità piuttosto grande, 36M. Poiché non riesco a trovare alcun motivo per cui search.module lo farebbe, ti chiedo ragazzi se hai qualche suggerimento su come procedere ulteriormente. L'aumento del limite di memory non è ansible in quanto Drupal si trova in un ambiente ospitato.

Ho limitato l'indexing fino a 10 nodes alla volta e ho modificato la lunghezza della parola più corta a 5 caratteri. Non riesco a capire come l'indexing di 10 nodes possa comunque consumare tutta quella memory.

Come eseguire il debug? Cosa provare? Qualsiasi idea sarebbe apprezzata!

Guarda la row 444 in /XXX/modules/search/search.module, qual è il codice lì?

Penso che abbiamo bisogno di sapere di più sul contenuto del tuo sito. Quanto è grande il sito? Quanti nodes? Quanto text per nodo, approssimativamente?

Controlla nel tuo database, quanta memory usi i tuoi nodes? Qual è la dimensione dell'integer database?

Hai un module installato che ti permette di cercare file e file allegati sul file system (come http://drupal.org/project/search_files )?

Ok, quindi dici che il cliente ha pubblicato più contenuti. Non abbiamo informazioni sulla quantità di memory utilizzata in precedenza dal cronjob. Molto probabilmente avevi ragione sotto i tuoi limiti di memory fino a poco tempo fa, e ora sei andato oltre. Questo genere di cose accade tutto il tempo in cui le persone che non sanno quello che stanno facendo mettono su siti web.

Come procedere ulteriormente? Aumenta la tua allocazione di memory per il module di ricerca. Voglio dire, sembra un po 'ovvio. Sei preoccupato che questo non si ridimensiona? Beh, non lo sai per certo, perché finora non hai profilato il problema.

Una cosa a cui pensare è che un motore di ricerca è un modo di scambiare lo spazio su disco per I / O quando viene eseguita una ricerca. O si scansionano tutti i documenti (usando I / O) per each ricerca, oppure si guardano gli indici (su disco) per get le informazioni. Quindi è naturale che uno script cron per indicizzare il tuo sito richieda una certa quantità di memory (come una sorta di spazio temporaneo su disco) per portre a termine il lavoro.

Il mio primo sospetto è che ci sia un grande 'whopper di un nodo nella coda che ti sta mettendo oltre il limite. Ci sono alcuni modi per testare questo:

Controlla la tabella search_dataset nel tuo database per il sid più grande che corrisponde a un nodo del tuo sito. Quindi, guarda i nodes con nid più grandi di quello. Uno di loro è anormalmente big o comunque strano? Prova a modificarlo per avere un corpo vuoto (assicurati di mantenere la vecchia revisione) e vedere se questo aiuta.

Altrimenti, commenteremo e proveremo qualcos'altro.