我的AEM作者实例每天晚上在作者工作时都会崩溃。这种情况每天都会发生,但在晚上的任何时候都会发生(作者团队在印度,他们工作的时候我在晚上)。
我在服务器上安装了AEM,在Apache实例后面安装了AEM Dispatcher。我试图围绕着崩溃时的HTTP调用找到规律,今天我在日志中遇到了一个奇怪的警告信息。
11.05.2020 18:29:50.126 *WARN* [sling-oak-observation-2] org.apache.jackrabbit.oak.segment.DefaultSegmentWriter Large number of modified child nodes: 45000000 @ //oak:index/uuid/:index
这条信息在日志中到处都是, 特别是在实例崩溃的时候.
这条消息是什么意思?难道JCR repo真的有一个节点有45000000个孩子?
TarMK持久层无法处理直接子节点的过多修改。这就是警告信息所说的。
11.05.2020 18:29:50.126 *WARN* [sling-oak-observation-2] org.apache.jackrabbit.oak.segment.DefaultSegmentWriter Large number of modified child nodes: 45000000 @ //oak:index/uuid/:index
不幸的是,这些修改是在UUID索引中,这不是在你的直接控制下,而是由Oak内部管理。
你也许可以通过版本清除来减少UUID索引的压力,从而减轻这个缺点,Alexander Berndt在他的评论中也提到了这一点。另外,版本清理允许你指定一个保留策略。如果你的业务情况允许,你可以通过降低保留时间来进一步减少版本数量。
此外,如果你有很多类型的节点 nt:resource
考虑转换 到 oak:resource
. 前者是可以引用的,因此在UUID索引中也有索引,后者则没有。