AEM内部重新索引过程会收集存储库数据并将其存储在Oak索引中,以支持内容的性能查询。 在特殊情况下,这一过程可能会变得缓慢甚至停滞。 本页作为疑难解答指南,可帮助确定索引速度是否较慢、找到原因并解决问题。
区分需要花费不恰当的长时间的重新索引和需要很长的时间的重新索引很重要,因为重新索引需要大量内容的索引。 例如,为内容编制索引所需的时间会随着内容量的增加而扩展,因此大型生产存储库重新编制索引所需的时间比小型开发存储库更长。
请参阅 有关查询和索引的最佳实践 有关何时以及如何重新索引内容的更多信息。
初始检测慢索引需要查看 IndexStats
JMX MBean。 在受影响的AEM实例上,执行以下操作:
打开Web控制台,然后单击JMX选项卡或转到https://<host>:<port>/system/console/jmx (例如, http://localhost:4502/system/console/jmx)。
导航到 IndexStats
姆比安。
打开 IndexStats
“ ”的MBean async
“ ”和“ ” fulltext-async
“。
对于两个MBean,检查 完成 时间戳和 LastIndexTime 时间戳距当前时间不到45分钟。
对于任一MBean,如果时间值(完成 或 LastIndexedTime)的时间大于当前时间的45分钟,则索引作业会失败或花费太长时间。 此问题会导致异步索引过时。
强制关闭导致AEM在重新启动后暂停异步索引长达30分钟。 此外,通常还需要15分钟才能完成第一次重新索引传递,总共大约需要45分钟(链接回 初始检测 时间范围(45分钟)。 如果索引在强制关闭后暂停:
首先,确定AEM实例是否以强制方式关闭(AEM进程被强制终止,或发生电源故障),然后重新启动。
如果强制关闭,则在重新启动时,AEM会自动暂停重新索引长达30分钟。
大约等待45分钟,以便AEM恢复正常的异步索引操作。
对于AEM 6.1,请确保 AEM 6.1 CFP 11 已安装。
在特殊情况下,用于管理异步索引的线程池可能会变得过载。 为了隔离索引过程,可以配置线程池以防止其他AEM工作干扰Oak及时索引内容的能力。 在这种情况下,请执行以下操作:
为Apache Sling Scheduler定义新的独立线程池以用于异步索引:
验证新的Apache Sling计划程序线程池是否已注册,并显示在Apache Sling计划程序状态Web控制台中。
导航到AEM OSGi Web控制台>“状态”>“Sling调度程序”或转到https://<host>:<port>/system/console/status-slingscheduler (例如, http://localhost:4502/system/console/status-slingscheduler)
验证以下池条目是否存在:
如果在短时间内对存储库进行了太多更改和提交,则索引可能会由于观察队列已满而延迟。 首先,确定观察队列是否已满:
转到Web控制台,然后单击JMX选项卡或转到https://<host>:<port>/system/console/jmx (例如, http://localhost:4502/system/console/jmx)
打开Oak存储库统计数据MBean并确定是否存在 ObservationQueueMaxLength
值大于10,000。
per second
部分),因此请验证 ObservationQueueMaxLength
的秒数指标为0。missRate
对于 DocChildren
中的缓存 Consolidated Cache
统计数据MBean。为避免超出可接受的观察队列限制,建议执行以下操作:
DiffCache
如中所述 性能调整提示> Mongo存储调整>文档缓存大小.在以下两种情况下,可以认为重新索引被“完全卡住”:
重新索引过程很慢,以至于日志文件未报告有关遍历的节点数的显着进展。
如果日志文件中出现重复的异常(例如, OutOfMemoryException
)时,不会将反向链接计算两次。 日志中重复出现一个或多个相同的异常,表示Oak尝试重复索引相同的内容,但在同一问题上失败。
要识别和修复停滞的重新索引过程,请执行以下操作:
要确定索引卡住的原因,必须收集以下信息:
收集5分钟的线程转储,每2秒转储一个线程转储。
从异步收集数据 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。
可以通过安全地中止重新索引(在完成之前停止) async, async-reindex
和f ulltext-async
索引通道( IndexStats
Mbean)。 有关更多信息,另请参阅有关的Apache 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
)
async
, async-reindex
,或 fulltext-async
.调用 abortAndPause()
命令(位于相应的 IndexStats
MBean。
正确标记Oak索引定义,以防止在索引通道恢复时恢复重新索引。
重新索引时 现有 索引,将reindex属性设置为false
/oak:index/someExistingIndex@reindex=false
否则,对于 新 索引,可以:
将type属性设置为禁用
/oak:index/someNewIndex@type=disabled
或完全删除索引定义
完成后,将更改提交到存储库。
最后,恢复对中止索引车道上的异步索引。
IndexStats
发出 abortAndPause()
命令,在步骤2中调用 resume()
命令。最好在静默期(例如,不在大型内容提取期间)重新索引,最好在已知并控制AEM加载的维护时段重新索引。 此外,请确保在其他维护活动中不会重新编制索引。