Oak索引疑难解答 troubleshooting-oak-indexes
重新索引缓慢 slow-re-indexing
AEM内部重新索引过程会收集存储库数据并将其存储在Oak索引中,以支持对内容的高性能查询。 在特殊情况下,这一过程可能会变得缓慢甚至停滞。 本页作为疑难解答指南,可帮助确定索引速度是否较慢,找到原因并解决问题。
区分需要花费不恰当的大量时间的重新索引与需要很长时间重新索引很重要,因为重新索引需要大量内容。 例如,为内容编制索引所需的时间会随着内容量的增加而扩展,因此大型生产存储库重新编制索引的时间比小型开发存储库长。
请参阅 有关查询和索引的最佳实践 有关何时以及如何重新索引内容的更多信息。
初始检测 initial-detection
初始检测慢索引需要查看 IndexStats
JMX MBean。 在受影响的AEM实例上,执行以下操作:
-
打开Web控制台,然后单击JMX选项卡或转到https://<host>:<port>/system/console/jmx (例如, http://localhost:4502/system/console/jmx)。
-
导航至
IndexStats
姆比安。 -
打开
IndexStats
“ ”的MBeanasync
”和“fulltext-async
“。 -
对于两个MBean,检查 完成 时间戳和 LastIndexTime 时间戳距当前时间不到45分钟。
-
对于任一MBean,如果时间值(完成 或 LastIndexedTime)大于当前时间的45分钟,则索引作业失败或耗时过长。 此问题会导致异步索引过时。
在强制关闭后暂停索引 indexing-is-paused-after-a-forced-shutdown
强制关闭导致AEM在重新启动后暂停异步索引长达30分钟。 此外,它通常需要15分钟才能完成第一个重新索引阶段,总共大约需要45分钟(追溯到 初始检测 时间范围(45分钟)。 如果索引在强制关闭后暂停:
-
首先,确定AEM实例是否以强制方式关闭(AEM进程被强制终止,或发生电源故障),然后重新启动。
- AEM日志记录 可以为此目的审查。
-
如果发生强制关闭,则在重新启动时,AEM会自动暂停重新索引长达30分钟。
-
请等待大约45分钟,以便AEM恢复正常的异步索引操作。
线程池过载 thread-pool-overloaded
在特殊情况下,用于管理异步索引的线程池可能会变得过载。 为了隔离索引过程,可以配置线程池以防止其他AEM工作干扰Oak及时索引内容的能力。 在这种情况下,请执行以下操作:
-
为Apache Sling调度程序定义新的独立线程池以用于异步索引:
- 在受影响的AEM实例上,导航到AEM OSGi Web Console>OSGi>配置>Apache Sling计划程序,或转到https://<host>:<port>/system/console/configMgr (例如, http://localhost:4502/system/console/configMgr)
- 向“允许的线程池”字段中添加一个值为“oak”的条目。
- 要保存更改,请单击 保存 在右下角。
-
验证新的Apache Sling计划程序线程池是否已注册,并显示在Apache Sling计划程序状态Web控制台中。
-
导航到AEM OSGi Web控制台>“状态”>“Sling计划程序”,或转到https://<host>:<port>/system/console/status-slingscheduler (例如, http://localhost:4502/system/console/status-slingscheduler)
-
验证以下池条目是否存在:
- ApacheSlingoak
- apacheslingdefault
-
观察队列已满 observation-queue-is-full
如果在短时间内对存储库进行了太多更改和提交,则索引可能会由于观察队列已满而延迟。 首先,确定观察队列是否已满:
-
转到Web控制台,然后单击JMX选项卡或转到https://<host>:<port>/system/console/jmx (例如, http://localhost:4502/system/console/jmx)
-
打开Oak存储库统计数据MBean并确定是否存在
ObservationQueueMaxLength
值大于10,000。- 在正常操作中,此最大值最终必须减少到零(尤其是在
per second
部分),因此请确认ObservationQueueMaxLength
的秒数指标为0。 - 如果值为10,000或更多,并且稳步增加,则表示至少一个(可能更多)队列的处理速度不能像新更改(提交)发生一样快。
- 每个观察队列都有一个限制(默认为10,000),如果队列点击了该限制,则其处理会降级。
- 使用MongoMK时,随着队列长度增大,内部Oak缓存性能会降低。 这种相关性可以体现在以下两点:
missRate
对于DocChildren
中的缓存Consolidated Cache
统计MBean。
- 在正常操作中,此最大值最终必须减少到零(尤其是在
-
为避免超出可接受的观察队列限制,建议:
- 降低提交固定速率。 承诺量出现短峰值是可以接受的,但应降低恒定速率。
- 增加的大小
DiffCache
如中所述 性能调整提示> Mongo存储调整>文档缓存大小.
识别和修复停滞的重新索引过程 identifying-and-remediating-a-stuck-re-indexing-process
在以下两种情况下,可认为重新索引被“完全卡住”:
-
重新索引很慢,以至于日志文件未报告关于遍历的节点数的显着进展。
- 例如,如果一小时内没有消息,或者进度太慢以至于需要一周或更长时间才能完成。
-
如果日志文件中出现重复的异常(例如,
OutOfMemoryException
)。 日志中重复出现一个或多个相同的异常,表示Oak尝试重复索引相同的内容,但在同一问题上失败。
要识别和修复停滞的重新索引过程,请执行以下操作:
-
要确定索引卡住的原因,必须收集以下信息:
-
收集5分钟的线程转储,每2秒转储一次线程转储。
-
- org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate
- org.apache.jackrabbit.oak.plugins.index.IndexUpdate
-
从异步收集数据
IndexStats
MBean:-
导航至AEM OSGi Web Console>Main>JMX>IndexStat>async
-
-
使用 oak-run.jar的控制台模式 以收集下存在的详细信息*
/:async
*节点。 -
使用收集存储库检查点的列表
CheckpointManager
MBean:-
AEM OSGi Web Console>Main>JMX>CheckpointManager>listCheckpoints()
-
-
-
收集了步骤1中概述的所有信息后,重新启动AEM。
- 如果存在高并发负载(观察队列溢出或类似情况),重新启动AEM可能会解决问题。
- 如果重启不能解决问题,请打开问题 Adobe客户关怀 并提供在步骤1中收集的所有信息。
安全中止异步重新索引 safely-aborting-asynchronous-re-indexing
可以通过安全地中止重新索引(在完成之前停止) async, async-reindex
和f ulltext-async
索引通道( IndexStats
Mbean)。 有关更多信息,另请参阅有关的Apache Oak文档 如何中止重新索引. 此外,请考虑以下事项:
- Lucene和Lucene属性索引的重新索引可以中止,因为它们是自然异步的。
- 只有通过启动重新索引,才能中止Oak属性索引的重新索引。
PropertyIndexAsyncReindexMBean
.
要安全地中止重新索引,请执行以下步骤:
-
确定控制必须停止的重新索引通道的IndexStats MBean。
-
通过JMX控制台导航到相应的IndexStats MBean,方法是转到AEM OSGi Web Console>Main>JMX或https://<host>:<port>/system/console/jmx (例如, http://localhost:4502/system/console/jmx)
-
根据要停止的重新索引通道打开IndexStats MBean(
async
,async-reindex
,或fulltext-async
)- 要识别适当的通道,从而识别IndexStats MBean实例,请查看Oak索引“异步”属性。 “async”属性包含通道名称:
async
,async-reindex
,或fulltext-async
. - 此外,还可以通过访问“异步”列中的AEM索引管理器来使用此通道。 要访问索引管理器,请导航到“操作”>“诊断”>“索引管理器”。
- 要识别适当的通道,从而识别IndexStats MBean实例,请查看Oak索引“异步”属性。 “async”属性包含通道名称:
-
-
调用
abortAndPause()
命令(位于相应的IndexStats
MBean。 -
适当地标记Oak索引定义,以防止在索引通道恢复时恢复重新索引。
-
重新索引时 现有 index,将reindex属性设置为false
/oak:index/someExistingIndex@reindex=false
-
否则,对于 新建 索引:
-
将type属性设置为禁用
/oak:index/someNewIndex@type=disabled
-
或完全删除索引定义
-
完成后,将更改提交到存储库。
-
-
最后,恢复在中止索引车道上的异步索引。
- 在
IndexStats
发出abortAndPause()
命令在步骤2中,调用resume()
命令。
- 在
防止重新索引缓慢 preventing-slow-re-indexing
最好在静默期(例如,在大型内容摄取期间不重新索引)以及理想情况下在已知并控制AEM加载的维护时段重新索引。 此外,请确保在其他维护活动中不会重新编制索引。