AEM 大量修改子节点

Posted

技术标签:

【中文标题】AEM 大量修改子节点【英文标题】:AEM Large number of modified child nodes 【发布时间】:2020-08-27 15:34:53 【问题描述】:

当作者在实例上工作时,我的 AEM Author 实例每晚都会崩溃。这种情况每天都会发生,但在夜间的任何时间都会发生(作者团队在印度,他们工作时我是晚上)。

我在服务器中安装了 AEM,位于带有 AEM Dispatcher 的 Apache 实例后面。我试图找到崩溃时 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 个子节点的节点吗?

【问题讨论】:

此警告可能与服务器崩溃有关,也可能无关。它抱怨 UUID 索引。可能是您以批处理模式创建页面修订吗?在您的代码中搜索来自 PageManager 的“.createRevision(”。 或者您创建了一百万个版本,这是 AEM 版本清除中的错误/过载。这应该是日常维护窗口的一部分。如上所述,您应该检查日常维护窗口不在印度的办公时间(默认情况下,其 2-5 UTC => 7:30 - 10:30 India) - 请参阅主菜单 -> 工具 -> 操作 ->维护 谢谢。我在 AEM 6.4 上,然后转到 /libs/granite/operations/content/maintenanceWindow.html/apps/settings/granite/operations/maintenance/granite_daily。 “修订清理”任务是绿色的,正如你所说,它正在印度的同一作者身上运行。但是,此页面还显示此任务仅运行几分钟,例如不到 5 分钟。缓慢的请求分布在 2-3 小时内。 这个实例多久被压缩一次?有多少作者同时工作?请查看慢查询健康检查。我还会查看这些指标以了解潜在问题。 但是UUID索引很奇怪。也许是配置错误的 MSM?您的页面是否有不同的 UUID(尤其是实时副本)?并且在另一次推出之后保持不变?因此,检查“Day CQ WCM Rollout Manager”的 OSGi 配置。应该有 jcr:* 或 jcr:uuid 一个排除的页面属性。作为最后的手段,我会尝试重新创建 UUID 索引。 【参考方案1】:

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 内部管理。

正如 Alexander Berndt 在他的评论中提到的那样,您可以通过版本清除减少版本数量来减轻 UUID 索引的压力,从而缓解这一缺点。此外,版本清除允许您指定保留策略。如果您的业务案例允许,您可以通过降低保留时间/计数来进一步减少版本数量。

如果您有许多 nt:resource consider switching 到 oak:resource 类型的节点。前者是可引用的,因此在 UUID 索引中被索引,后者不是。

【讨论】:

以上是关于AEM 大量修改子节点的主要内容,如果未能解决你的问题,请参考以下文章

计算特定XML节点c#的子节点数[重复]

高手帮忙:sql 里怎样递归判断父节点和子节

实战之部署Redis哨兵模式-Docker版本

jQuery DOM节点操作 - 父节点子节点兄弟节点

ztree获取当前选中节点子节点id集合的方法(转载)

是元素节点的属性节点子节点