AEM processo di reindicizzazione interna raccoglie i dati del repository e li memorizza negli indici Oak per supportare la query performante del contenuto. In circostanze eccezionali, il processo può diventare lento o addirittura bloccato. Questa pagina funge da guida alla risoluzione dei problemi per identificare se l’indicizzazione è lenta, trovare la causa e risolvere il problema.
È importante distinguere tra la reindicizzazione che richiede un tempo inappropriato e la reindicizzazione che richiede molto tempo perché sta indicizzando grandi quantità di contenuto. Ad esempio, il tempo necessario per indicizzare il contenuto viene ridimensionato in base alla quantità di contenuto, quindi la reindicizzazione degli archivi di produzione di grandi dimensioni richiederà più tempo rispetto ai piccoli archivi di sviluppo.
Consulta la sezione Tecniche consigliate per query e indicizzazione per ulteriori informazioni su quando e come reindicizzare il contenuto.
L'indicizzazione lenta del rilevamento iniziale richiede la revisione IndexStats
MBeans JMX. Nell’istanza AEM interessata, procedi come segue:
Apri la console Web e fai clic sulla scheda JMX oppure vai a https://<host>:<port>/system/console/jmx (ad esempio, http://localhost:4502/system/console/jmx).
Passa a IndexStats
Fagioli.
Apri IndexStats
MBeans for " async
" e " fulltext-async
".
Per entrambi i MBeans, controlla se il Fine timestamp e LastIndexTime le marche temporali sono inferiori a 45 minuti dall’ora corrente.
Per MBean, se il valore del tempo (Fine o LastIndexedTime) è maggiore di 45 minuti dall'ora corrente, quindi il processo di indicizzazione non riesce o richiede troppo tempo. Questo causa l’obsolescenza degli indici asincroni.
Un arresto forzato comporta AEM sospensione dell'indicizzazione asincrona per un massimo di 30 minuti dopo il riavvio e in genere richiede altri 15 minuti per completare il primo passaggio di reindicizzazione, per un totale di circa 45 minuti (collegamento al Rilevamento iniziale arco temporale di 45 minuti). Nel caso in cui si sospetti che l'indicizzazione venga sospesa dopo uno spegnimento forzato:
In primo luogo, determinare se l'istanza AEM è stata chiusa in modo forzato (il processo di AEM è stato ucciso con la forza o si è verificato un guasto elettrico) e successivamente riavviata.
Se l'arresto forzato si è verificato, al riavvio, AEM automaticamente sospende la reindicizzazione per un massimo di 30 minuti.
Attendi circa 45 minuti per AEM riprendere le normali operazioni di indicizzazione asincrona.
Per AEM 6.1, assicurati che AEM 6.1 PCP 11 è installato.
In circostanze eccezionali, il pool di thread utilizzato per gestire l'indicizzazione asincrona può diventare sovraccarico. Al fine di isolare il processo di indicizzazione, un pool di thread può essere configurato per evitare che altri lavori AEM interferiscano con la capacità di Oak di indicizzare il contenuto in modo tempestivo. A questo scopo, devi:
Definisci un nuovo pool di thread isolato per Apache Sling Scheduler da utilizzare per l'indicizzazione asincrona:
Verifica che il nuovo pool di thread Apache Sling Scheduler sia registrato e visualizzato nella console web Apache Sling Scheduler Satus.
Passa alla console Web OSGi AEM>Stato>Utilità di pianificazione Sling oppure vai a https://<host>:<port>/system/console/status-slingscheduler (ad esempio, http://localhost:4502/system/console/status-slingscheduler)
Verifica che siano presenti le seguenti voci del pool:
Se vengono apportate troppe modifiche e commit all'archivio in un breve periodo di tempo, l'indicizzazione può essere ritardata a causa di una coda di osservazione completa. In primo luogo, determinare se la coda di osservazione è piena:
Vai alla Console web e fai clic sulla scheda JMX o vai a https://<host>:<port>/system/console/jmx (ad esempio, http://localhost:4502/system/console/jmx)
Apri l'MBean delle statistiche dell'archivio Oak e stabilisci se esiste ObservationQueueMaxLength
è maggiore di 10.000.
per second
in modo da verificare che ObservationQueueMaxLength
Le metriche dei secondi sono 0.missRate
per DocChildren
nella cache Consolidated Cache
statistiche MBean.Per evitare di superare i limiti accettabili della coda di osservazione, si raccomanda di:
DiffCache
come descritto in Suggerimenti per l'ottimizzazione delle prestazioni > Ottimizzazione archiviazione Mongo > Dimensione della cache del documento.La reindicizzazione può essere considerata "completamente bloccata" in due condizioni:
La reindicizzazione è molto lenta, al punto in cui non viene riportato alcun progresso significativo nei file di log riguardo al numero di nodi attraversati.
La reindicizzazione è bloccata in un ciclo infinito se nei file di log vengono visualizzate eccezioni ripetute (ad esempio, OutOfMemoryException
) nel thread di indicizzazione. La ripetizione delle stesse eccezioni nel registro indica che Oak tenta di indicizzare ripetutamente la stessa cosa, ma non riesce sullo stesso problema.
Per identificare e correggere un processo di reindicizzazione bloccato, procedi come segue:
Per identificare la causa dell’indicizzazione bloccata, è necessario raccogliere le seguenti informazioni:
Raccogliere 5 minuti di dump di thread, un dump di thread ogni 2 secondi.
Imposta il livello DEBUG e i registri per gli appendici.
Raccogliere dati dall'asincrono IndexStats
MBean:
Passa a AEM Console web OSGi>Principale>JMX>IndexStat>async
Utilizzo modalità console di oak-run.jar per raccogliere i dettagli di ciò che esiste sotto il * /:async
* nodo.
Raccogli un elenco di punti di controllo del repository utilizzando CheckpointManager
MBean:
Console Web OSGi AEM>Principale>JMX>CheckpointManager>listCheckpoints()
Dopo aver raccolto tutte le informazioni descritte nel passaggio 1, riavviare AEM.
La reindicizzazione può essere interrotta in modo sicuro (interrotta prima del completamento) tramite il async, async-reindex
e f ulltext-async
corsie di indicizzazione ( IndexStats
Mbean). Per ulteriori informazioni, consulta anche la documentazione di Apache Oak su Come interrompere la reindicizzazione. Inoltre, prendere in considerazione che:
PropertyIndexAsyncReindexMBean
.Per interrompere in modo sicuro la reindicizzazione, segui questi passaggi:
Identificare la MBean IndexStats che controlla la corsia di reindicizzazione che deve essere arrestata.
Passa alla MBean IndexStats appropriata tramite la console JMX andando alla console OSGi Web Console>Principale>JMX o https://<host>:<port>/system/console/jmx (ad esempio, http://localhost:4502/system/console/jmx)
Apri la MBean IndexStats in base alla corsia di reindicizzazione che desideri arrestare ( async
, async-reindex
oppure fulltext-async
)
async
, async-reindex
oppure fulltext-async
.Richiama il abortAndPause()
sul comando appropriato IndexStats
MBean.
Contrassegna la definizione dell'indice Oak in modo appropriato per impedire la ripresa della reindicizzazione quando la corsia di indicizzazione riprende.
Durante la reindicizzazione di un esistente index, imposta la proprietà reindex su false
/oak:index/someExistingIndex@reindex=false
Oppure, per un nuovo indice:
Imposta la proprietà type su disabled
/oak:index/someNewIndex@type=disabled
o rimuovere completamente la definizione dell'indice
Al termine, conferma le modifiche all’archivio.
Infine, riprendere l'indicizzazione asincrona sulla corsia di indicizzazione interrotta.
IndexStats
MBean che ha emesso il abortAndPause()
nel passaggio 2, richiamare il resume()
comando.È meglio reindicizzare durante i periodi di inattività (ad esempio, non durante un caricamento di contenuti di grandi dimensioni) e idealmente durante le finestre di manutenzione quando il caricamento AEM è noto e controllato. Inoltre, assicurati che la reindicizzazione non avvenga durante altre attività di manutenzione.