AEM processo interno di reindicizzazione raccoglie i dati del repository e li memorizza negli indici Oak per supportare la query del contenuto da parte degli esecutori. 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, individuare la causa e risolvere il problema.
È importante distinguere tra reindicizzazione che richiede un tempo eccessivamente lungo e reindicizzazione che richiede molto tempo, perché indicizza grandi quantità di contenuto. Ad esempio, il tempo necessario per indicizzare le dimensioni dei contenuti in base alla quantità di contenuto, pertanto i repository di produzione di grandi dimensioni richiederanno più tempo per reindicizzarsi rispetto ai repository di sviluppo di piccole dimensioni.
Per ulteriori informazioni su quando e come reindicizzare il contenuto, vedere le Best Practices on Queries and Indexing.
L'indicizzazione lenta del rilevamento iniziale richiede la revisione dei MBean IndexStats
JMX. Nell’istanza AEM interessata, effettuate le seguenti operazioni:
Aprite la console Web e fate clic sulla scheda JMX oppure andate a https://<host>:<porta>/system/console/jmx (ad esempio, http://localhost:4502/system/console/jmx).
Passare ai fagioli IndexStats
.
Aprire i IndexStats
MBeans per " async
" e " fulltext-async
".
Per entrambi gli MBeans, verificare che la marca temporale Done e la marca temporale LastIndexTime siano inferiori a 45 minuti dall'ora corrente.
Per MBean, se il valore di tempo (Done o LastIndexedTime) è maggiore di 45 minuti dall'ora corrente, il processo di indice non riesce o richiede troppo tempo. Questo causa l'insufficienza degli indici asincroni.
Una chiusura forzata comporta AEM sospensione dell'indicizzazione asincrona fino a 30 minuti dopo il riavvio e in genere richiede altri 15 minuti per completare la prima passata di reindicizzazione, per un totale di circa 45 minuti (collegando nuovamente la Rilevamento iniziale con un periodo di 45 minuti). Nel caso in cui sospettate che l'indicizzazione venga messa in pausa dopo un arresto forzato:
In primo luogo, determinare se l'istanza di AEM è stata chiusa in modo forzato (il processo di AEM è stato ucciso con la forza, o si è verificato un errore di alimentazione) e successivamente riavviata.
Se l'arresto forzato si è verificato, al riavvio AEM sospende automaticamente la reindicizzazione per un massimo di 30 minuti.
Attendete circa 45 minuti affinché AEM riprendere le normali operazioni di indicizzazione asincrona.
Per AEM 6.1, assicurarsi che sia installato AEM 6.1 CFP 11.
In circostanze eccezionali, il pool di thread utilizzato per gestire l'indicizzazione asycronica potrebbe venire sovraccaricato. Per isolare il processo di indicizzazione, è possibile configurare un pool di thread in modo da impedire ad altri AEM di interferire con la capacità di Oak di indicizzare i contenuti in modo tempestivo. A tal fine, è necessario:
Definite un nuovo pool di thread isolato per l'Utilità di pianificazione Apache Sling da utilizzare per l'indicizzazione asincrona:
Verificate che il nuovo pool di thread Apache Sling Scheduler sia registrato e venga visualizzato nella console Web Apache Sling Scheduler Satus.
Passate alla console Web OSGi AEM>Stato>Programmazione Sling oppure andate a https://<host>:<porta>/system/console/status-slingscheduler (ad esempio, http://localhost:4502/system/console/status-slingscheduler)
Verificare che siano presenti le seguenti voci del pool:
Se in poco tempo vengono apportate troppe modifiche e impegni al repository, l'indicizzazione può essere ritardata a causa di una coda di osservazione completa. In primo luogo, determinare se la coda di osservazione è piena:
Andate alla console Web e fate clic sulla scheda JMX oppure andate a https://<host>:<porta>/system/console/jmx (ad esempio, http://localhost:4502/system/console/jmx)
Aprite le statistiche dell'archivio quercia MBean e stabilite se un qualsiasi valore ObservationQueueMaxLength
è maggiore di 10.000.
per second
), per verificare che le metriche dei secondi di ObservationQueueMaxLength
siano pari a 0.missRate
aumentata per la cache DocChildren
nella Consolidated Cache
statistica 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 dell'archiviazione del Mongo > Dimensione della cache del documento.La reindicizzazione può essere considerata "completamente bloccata" in due condizioni:
Il reindicizzazione è molto lento, al punto in cui non viene segnalato alcun progresso significativo nei file di registro riguardo al numero di nodi attraversati.
La reindicizzazione viene bloccata in un ciclo infinito se nei file di registro (ad esempio, OutOfMemoryException
) vengono visualizzate eccezioni ripetute 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, effettuare le seguenti operazioni:
Per identificare la causa dell’indicizzazione bloccata, è necessario raccogliere le seguenti informazioni:
Raccogliere 5 minuti di dump del thread, un dump del thread ogni 2 secondi.
Impostare il livello DEBUG e i registri per le appendici.
Raccogli dati da IndexStats
MBean asincrono:
Passa a AEM console Web OSGi>Principale>JMX>IndexStat>asincrono
oppure andate alla pagina http://localhost:4502/system/console/jmx/org.apache.jackrabbit.oak%3Aname%3Dasync%2Ctype%3DIndexStats
Utilizzare la modalità console oak-run.jar per raccogliere i dettagli di ciò che esiste sotto il nodo * /:async
*.
Raccogli un elenco di checkpoint del repository utilizzando il file CheckpointManager
MBean:
AEM console Web OSGi>Principale>JMX>CheckpointManager>listCheckpoint()
oppure andate alla pagina http://localhost:4502/system/console/jmx/org.apache.jackrabbit.oak%3Aname%3DSegment+node+store+checkpoint+management%2Ctype%3DCheckpointManager
Dopo aver raccolto tutte le informazioni descritte nel passaggio 1, riavviare AEM.
È possibile interrompere la reindicizzazione in modo sicuro (interromperla prima del completamento) tramite le corsie di indicizzazione async, async-reindex
e f ulltext-async
( IndexStats
Mava). Per ulteriori informazioni, consulta anche la documentazione Apache Oak su Come interrompere la reindicizzazione. Inoltre, prendere in considerazione che:
PropertyIndexAsyncReindexMBean
.Per interrompere la reindicizzazione in modo sicuro, procedere come segue:
Identificare l'MBean IndexStats che controlla la corsia di reindicizzazione da arrestare.
Andate alla console JMX relativa a IndexStats MBean tramite AEM console OSGi Web Console>Principale>JMX o https://<host>:<porta>/system/console/jmx (ad esempio, http://localhost:4502/system/console/jmx)
Aprire l'MBean IndexStats in base alla corsia di reindicizzazione che si desidera arrestare ( async
, async-reindex
o fulltext-async
)
async
, async-reindex
o fulltext-async
.Richiamate il comando abortAndPause()
nel file IndexStats
MBean appropriato.
Contrassegnate la definizione dell'indice Oak in modo appropriato per impedire la ripresa della reindicizzazione quando la corsia di indicizzazione riprende.
Quando si reindicizza un indice esistente, impostare la proprietà reindex su false
/oak:index/someExistingIndex@reindex=false
Oppure, per un indice new:
Impostare la proprietà type su disabled
/oak:index/someNewIndex@type=disabled
o rimuovere completamente la definizione di indice
Al termine, inviate le modifiche alla directory archivio.
Infine, riprendere l'indicizzazione asycronica sulla corsia di indicizzazione interrotta.
IndexStats
MBean che ha emesso il comando abortAndPause()
nel passaggio 2, richiamare il comando resume()
.È consigliabile 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 AEM carico è noto e controllato. Inoltre, accertarsi che la reindicizzazione non abbia luogo durante altre attività di manutenzione.