Risoluzione dei problemi degli indici Oak troubleshooting-oak-indexes
Re-indicizzazione lenta slow-re-indexing
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.
Rilevamento iniziale initial-detection
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.
L'indicizzazione viene sospesa dopo un arresto forzato indexing-is-paused-after-a-forced-shutdown
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.
- Registrazione AEM possono essere esaminati a tal fine.
-
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.
Pool di thread sovraccaricato thread-pool-overloaded
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:
- Nell'istanza AEM interessata, accedi AEM Console Web OSGi>OSGi>Configurazione>Modulo di pianificazione Apache Sling o vai su https://<host>:<port>/system/console/configMgr (ad esempio, http://localhost:4502/system/console/configMgr)
- Aggiungi una voce al campo "Pool di thread consentiti" con il valore di "oak".
- Fai clic su Salva in basso a destra per salvare le modifiche.
-
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:
- ApacheSlingoak
- ApacheSlingdefault
-
La coda di osservazione è piena observation-queue-is-full
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.- Nelle operazioni normali, questo valore massimo deve sempre ridursi a zero (in particolare
per second
in modo da verificare cheObservationQueueMaxLength
Le metriche dei secondi sono 0. - Se i valori sono pari o superiori a 10.000 e aumentano costantemente, ciò indica che almeno una (possibilmente più) coda non può essere elaborata con la stessa velocità con cui si verificano nuove modifiche (commit).
- Ogni coda di osservazione ha un limite (10.000 per impostazione predefinita) e, se la coda raggiunge tale limite, l’elaborazione diminuisce.
- Quando si utilizza MongoMK, quando le lunghezze di coda aumentano, le prestazioni interne della cache Oak si riducono. Questa correlazione può essere vista in un
missRate
perDocChildren
nella cacheConsolidated Cache
statistiche MBean.
- Nelle operazioni normali, questo valore massimo deve sempre ridursi a zero (in particolare
-
Per evitare di superare i limiti accettabili della coda di osservazione, si raccomanda di:
- Ridurre la frequenza costante di commit. I picchi brevi nei commit sono accettabili, ma il tasso costante dovrebbe essere ridotto.
- Aumenta le dimensioni del
DiffCache
come descritto in Suggerimenti per l'ottimizzazione delle prestazioni > Ottimizzazione archiviazione Mongo > Dimensione della cache del documento.
Identificazione e correzione di un processo di reindicizzazione bloccato identifying-and-remediating-a-stuck-re-indexing-process
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.
- Ad esempio, se non ci sono messaggi nel corso di un’ora o se il progresso è così lento che ci vorrà una settimana o più per terminare.
-
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.
- org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate
- org.apache.jackrabbit.oak.plugins.index.IndexUpdate
-
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.
- Il riavvio del AEM può risolvere il problema nel caso di un carico concomitante elevato (overflow della coda di osservazione o qualcosa di simile).
- Se un riavvio non risolve il problema, apri un problema con Adobe Customer Care e fornire tutte le informazioni raccolte nel passaggio 1.
Riindicizzazione asincrona interrotta in modo sicuro safely-aborting-asynchronous-re-indexing
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:
- La reindicizzazione degli indici delle proprietà Lucene e Lucene può essere interrotta in quanto sono naturalmente asincroni.
- La reindicizzazione degli indici delle proprietà Oak può essere interrotta solo se la reindicizzazione è stata avviata tramite il
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
oppurefulltext-async
)- Per identificare la corsia appropriata e quindi l'istanza MBean IndexStats, controlla la proprietà "async" degli indici Oak. La proprietà "async" conterrà il nome della corsia:
async
,async-reindex
oppurefulltext-async
. - La corsia è disponibile anche accedendo a AEM Index Manager nella colonna "Async". Per accedere al Gestore indici, passa a Operazioni > Diagnosi>Gestione indici.
- Per identificare la corsia appropriata e quindi l'istanza MBean IndexStats, controlla la proprietà "async" degli indici Oak. La proprietà "async" conterrà il nome della corsia:
-
-
Richiama il
abortAndPause()
sul comando appropriatoIndexStats
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.
- In
IndexStats
MBean che ha emesso ilabortAndPause()
nel passaggio 2, richiamare ilresume()
comando.
- In
Impedire la reindicizzazione lenta preventing-slow-re-indexing
È 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.