Bei der internen AEM-Neuindizierung werden Repository-Daten gesammelt und in Oak-Indizes gespeichert, die die performante Abfrage von Inhalt unterstützen. Bei außergewöhnlichen Umständen kann der Vorgang langsam werden oder sogar anhalten. Diese Seite dient als Leitfaden zur Fehlerbehebung und soll Sie dabei unterstützen, langsame Indizierungen und deren Ursache zu erkennen und zu beheben.
Dabei muss zwischen Neuindizierungen unterschieden werden, die ungewöhnliche lange dauern, und Neuindizierungen, die aufgrund der sehr großen Menge an Inhalt lange brauchen. Die für die Inhaltsindizierung benötigte Zeit ist beispielsweise abhängig von der Menge an Inhalt. Daher dauert die Neuindizierung großer Produktions-Repositorys länger als die Indizierung kleiner Entwicklungs-Repositorys.
Weitere Informationen dazu, wann und wie Sie Inhalt neu indizieren, finden Sie unter Best Practices für Abfragen und Indizierung.
Um eine langsame Indizierung anfänglich zu erkennen, müssen die IndexStats
-JMX-MBeans überprüft werden. Klicken Sie auf die betroffene AEM-Instanz und gehen Sie wie folgt vor:
Öffnen Sie die Web-Konsole und klicken Sie auf die Registerkarte „JMX“. Oder wechseln Sie zu https://<Host>:<Port>/system/console/jmx (z. B. http://localhost:4502/system/console/jmx).
Navigieren Sie zu den IndexStats
-MBeans.
Öffnen Sie die IndexStats
-MBeans für async
und fulltext-async
.
Überprüfen Sie für beide MBeans, ob die Zeitstempel Done und LastIndexTime weniger als 45 Minuten zurückliegen.
Falls für eines der MBeans der Zeitstempel (Done oder LastIndexedTime) mehr als 45 Minuten zurückliegt, dauert der Indizierungsvorgang zu lange oder ist fehlgeschlagen. Dies führt dazu, dass die asynchronen Indizes veraltet sind.
Nach einem erzwungenen Abschalten hält AEM die asynchrone Indizierung bis zu 30 Minuten nach dem Neustart an und benötigt in der Regel weitere 15 Minuten, also insgesamt 45 Minuten, um den ersten Indizierungsdurchgang abzuschließen. (Dies entspricht dem Zeitrahmen von 45 Minuten für die anfängliche Erkennung). Falls Sie vermuten, dass die Indizierung nach einem erzwungenen Abschalten angehalten wurde, gehen Sie wie folgt vor:
Finden Sie zuerst heraus, ob das Abschalten der AEM-Instanz erzwungen wurde (das Ende des AEM-Vorgangs wurde erzwungen oder ein Stromausfall trat auf) und diese anschließend neu gestartet wurde.
Falls das Abschalten erzwungen wurde, wurde die Neuindizierung von AEM beim Neustart automatisch für bis zu 30 Minuten angehalten.
Warten Sie ungefähr 45 Minuten, dass AEM den normalen asynchronen Indizierungsvorgang wieder aufnimmt.
Stellen Sie bei AEM 6.1 sicher, dass AEM 6.1 CFP 11 installiert ist.
Bei außergewöhnlichen Umständen kann der zum Verwalten der asynchronen Indizierung verwendete Thread-Pool überlastet sein. Um den Indizierungsvorgang zu isolieren, kann ein Thread-Pool konfiguriert werden, der verhindert, dass andere AEM-Vorgänge die zügige Inhaltsindizierung von Oak beeinträchtigen. Gehen Sie dazu wie folgt vor:
Definieren Sie einen neuen, isolierten Thread-Pool für den Apache Sling Scheduler:
Überprüfen Sie, dass der neue Thread-Pool in Apache Sling Scheduler registriert ist und in der Statusanzeige der Web-Konsole von Apache Sling Scheduler angezeigt wird.
Navigieren Sie zu „AEM-OSGi-Web-Konsole“ > „Status“ > „Sling Scheduler“ oder zu https://<Host>:<Port>/system/console/status-slingscheduler (beispielsweise http://localhost:4502/system/console/status-slingscheduler).
Vergewissern Sie sich, dass die folgenden Pool-Einträge vorhanden sind:
Falls am Repository in kurzer Zeit zu viele Änderungen oder Commits erfolgen, kann dies die Indizierung verzögern, da die Überwachungswarteschlange voll ist. Stellen Sie zuerst fest, ob die Überwachungswarteschlange voll ist:
Wechseln Sie zur Web-Konsole und klicken Sie auf die Registerkarte „JMX“. Oder wechseln Sie zu https://<Host>:<Port>/system/console/jmx (beispielsweise http://localhost:4502/system/console/jmx).
Öffnen Sie im Oak-Repository das Statistik-MBean und überprüfen Sie, ob einer der Werte für ObservationQueueMaxLength
mehr als 10.000 beträgt.
per second
). Überprüfen Sie daher, ob der Sekundenwert für ObservationQueueMaxLength
0 beträgt.missRate
beim DocChildren
-Cache im Statistik-MBean Consolidated Cache
.Folgende Vorgehensweise ist empfohlen, um das Überschreiten der akzeptablen Grenzwerte für die Überwachungswarteschlange zu vermeiden:
DiffCache
wie unter Tipps zur Leistungsoptimierung > Mongo-Speicheroptimierung > Dokument-Cache-Größe beschrieben.Die Neuindizierung gilt unter zwei Bedingungen als „vollständig unterbrochen“:
Die Neuindizierung ist sehr langsam. In den Protokolldateien wird kein wirklicher Fortschritt bei der Anzahl der durchsuchten Knoten erfasst.
Die Neuindizierung hängt in einer endlosen Schleife, wenn wiederholte Ausnahmen in den Protokolldateien des Indizierungs-Thread angezeigt werden (beispielsweise OutOfMemoryException
). Die Wiederholung der gleichen Ausnahmen im Protokoll deutet auf Oak-Versuche hin, die gleichen Daten wiederholt zu indizieren, wobei immer der gleiche Fehler auftritt.
Gehen Sie wie folgt vor, um einen unterbrochenen Neuindizierungsvorgang zu identifizieren und zu beheben:
Um die Ursache einer unterbrochenen Indizierung zu finden, benötigen Sie folgende Informationen:
Erfassen Sie 5 Minuten lang Thread-Dumps, eine Thread-Dump alle 2 Sekunden.
Legen Sie DEBUG-Stufen und Protokolle für die Appender fest.
Erfassen Sie die Daten aus dem asynchronen IndexStats
-MBean:
Navigieren Sie zu AEM OSGi-Web-Konsole > Hauptfenster > JMX > IndexStat > async
oder gehen Sie zu http://localhost:4502/system/console/jmx/org.apache.jackrabbit.oak%3Aname%3Dasync%2Ctype%3DIndexStats
Verwenden Sie den Befehl oak-run.jar's console mode, um Details zum /:async
-Knoten abzurufen.
Erfassen Sie anhand des CheckpointManager
-MBean eine Liste der Repository-Checkpoints:
AEM OSGi-Web-Konsole > Hauptfenster > JMX > CheckpointManager > listCheckpoints()
oder gehen Sie zu http://localhost:4502/system/console/jmx/org.apache.jackrabbit.oak%3Aname%3DSegment+node+store+checkpoint+management%2Ctype%3DCheckpointManager
Wenn Sie alle in Schritt 1 genannten Informationen erfasst haben, starten Sie AEM neu.
Die Neuindizierung kann sicher über die Index-Spuren async, async-reindex
und ulltext-async
(IndexStats
-MBean) abgebrochen, d. h. vor dem Abschluss gestoppt werden. Weitere Informationen finden Sie auch in der Dokumentation zu Apache Oak im Abschnitt Abbrechen der Neuindizierung. Berücksichtigen Sie zusätzlich Folgendes:
PropertyIndexAsyncReindexMBean
initiiert wurde.Um die Neuindizierung sicher abzubrechen, führen Sie folgende Schritte aus:
Identifizieren Sie das indexStats-MBean, das die Neuindizierungsspur steuert, die Sie stoppen möchten.
Navigieren Sie über die JMX-Konsole zum gewünschten IndexStats-MBean. Wechseln Sie dazu entweder zu „AEM-OSGi-Web-Konsole“ > „Haupt“ > „JMX“ oder zu https://<Host>:<Port>/system/console/jmx (beispielsweise http://localhost:4502/system/console/jmx).
Öffnen Sie das entsprechende IndexStats-MBean, je nach der Neuindizierungsspur, die Sie stoppen möchten (async
, async-reindex
oder fulltext-async
).
async
, async-reindex
oder fulltext-async
.Rufen Sie den Befehl abortAndPause()
auf dem entsprechenden IndexStats
-MBean auf.
Markieren Sie die entsprechende Oak-Index-Definition, um zu verhindern, dass die Neuindizierung fortgesetzt wird, wenn die Index-Spur fortgesetzt wird.
Wenn Sie einen vorhandenen Index neu indizieren, setzen Sie die Eigenschaft für die Neuindizierung auf „false“.
/oak:index/someExistingIndex@reindex=false
Bei einem neuen Index gehen Sie wie folgt vor:
Setzen Sie die Type-Eigenschaft auf „disabled“
/oak:index/someNewIndex@type=disabled
oder entfernen Sie die Indexdefinition vollständig.
Speichern Sie die Änderungen nach Beendigung des Vorgangs im Repository.
Setzen Sie dann die asynchrone Indizierung auf den abgebrochenen Index-Spuren fort.
IndexStats
-MBean, das denabortAndPause()
-Befehl in Schritt 2 ausgegeben hat, den resume()
-Befehl auf.Die Neuindizierung empfiehlt sich zu ruhigen Zeiten (also nicht während der Verarbeitung großer Inhaltsmengen) und idealerweise während eines Wartungsfensters, wenn die AEM-Last bekannt und unter Kontrolle ist. Vergewissern Sie sich außerdem, dass Ihre Neuindizierung nicht während anderer Wartungstätigkeiten stattfindet.