添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
乖乖的绿豆  ·  排查 Dependabot 错误 - ...·  1 月前    · 
想旅行的遥控器  ·  中国新闻网·  6 月前    · 
听话的手套  ·  vscode ...·  10 月前    · 
精明的日记本  ·  Logo, google, g icon ...·  1 年前    · 

修订版清理

存储库的每次更新都会创建一个内容修订版本。 因此,每次更新后,存储库的大小都会增大。 必须清理旧修订版本以释放磁盘资源 — 这对于避免不受控制的存储库增长非常重要。 此维护功能称为修订版清理。 自Adobe Experience Manager (AEM) 6.0起,它就一直作为离线例程提供。

在AEM 6.3及更高版本中,引入了此功能的在线版本,称为“在线修订版清理”。 与必须关闭AEM实例的脱机修订清理相比,可以在AEM实例处于联机状态时运行联机修订清理。 默认情况下,联机修订版清理处于打开状态,这是执行修订版清理的推荐方式。

注释 观看视频 介绍以及如何使用在线修订版清理。

修订清理过程包括三个阶段: 估计 压缩 、和 clean . 估算根据可能收集到的垃圾量来确定是否运行下一阶段(压缩)。 在压缩阶段,区段和tar文件将被重写,而不包含任何未使用的内容。 然后,清理阶段将删除旧区段,包括这些区段可能包含的任何垃圾。 脱机模式通常可以回收更多空间,因为联机模式必须考虑AEM工作集,该工作集保留无法收集的其他区段。

有关修订版清理的更多详细信息,请参阅以下链接:

  • 如何运行联机修订版清理
  • 联机修订清理常见问题解答
  • 如何运行脱机修订版清理
  • 此外,您还可以阅读 Oak官方文档 .

    何时使用联机修订版清理,而不是脱机修订版清理?

    建议使用“联机修订版清理”来执行修订版清理。 脱机修订清除只能在特殊情况下使用 — 例如,在迁移到新存储格式之前,或者如果Adobe客户关怀部门要求您这样做时。

    如何运行联机修订版清理

    默认情况下,在线修订清理配置为在AEM创作实例和发布实例上每天自动运行一次。 您只需在用户活动最少的时段定义维护窗口。 可以按如下方式配置“联机修订版清理”任务:

    在AEM主窗口中,转到 工具 — 操作 — 功能板 — 维护 或将浏览器指向: https://serveraddress:serverport/libs/granite/operations/content/maintenance.html

    将鼠标悬停在 每日维护时段 并单击 设置 图标。

    输入所需的值(重复周期、开始时间、结束时间),然后单击 保存 .

    或者,如果要手动运行修订清除任务,您可以:

    转到 工具 — 操作 — 功能板 — 维护 或直接浏览到 https://serveraddress:serverport/libs/granite/operations/content/maintenance.html

    单击 每日维护时段 .

    将鼠标悬停在 修订版清理 图标。

    单击 运行 .

    脱机修订版清理后运行联机修订版清理

    修订清理过程按层代回收旧修订。 这意味着每次运行修订清理时,都会在磁盘上创建并保留新一代。 但是,这两种修订清理类型之间存在区别:脱机修订清理保留一代,而联机修订清理保留两代。 因此,当您运行在线修订清理时 之后 脱机修订清理,会发生以下情况:

  • 在首次运行联机修订版清理后,存储库大小会翻倍。 之所以会出现这种情况,是因为现在磁盘上保留了两代数据。
  • 在后续运行期间,存储库将在创建新一代时临时增长,然后随着在线修订清理过程回收前一代版本,稳定到首次运行后的大小。
  • 此外,请记住,根据提交的类型和数量,每个层代的大小可能与前一代相比有所不同,因此最终大小可能因运行而异。

    因此,建议磁盘大小至少比最初估计的存储库大小大两到三倍。

    全压实模式和尾压实模式

    AEM 6.5 介绍 两种新模式 对于 压缩 联机版本清理过程的阶段:

  • 完全压缩 模式重写整个存储库中的所有区段和tar文件。 因此,后续的清理阶段可以清除整个存储库中的最大垃圾量。 由于完全压缩会影响整个存储库,因此它需要大量系统资源和时间才能完成。 完全压实对应于AEM 6.3中的压实阶段。
  • 尾压缩 模式仅重写存储库中最近的区段和tar文件。 最新的区段和tar文件是自上次运行完全或尾部压缩以来添加的区段。 因此,后续的清理阶段只能删除存储库最近部分中包含的垃圾。 由于尾部压缩仅影响存储库的一部分,因此它比完全压缩需要更少的系统资源和完成时间。
  • 这些压实方式构成了效率与资源消耗之间的权衡:尾压实效果较差,对系统正常运行的影响也较小。 相比之下,完全压实更有效,但对系统正常运行的影响更大。

    AEM 6.5还在压缩期间引入了更有效的内容去重机制,从而进一步减少了存储库在磁盘上的占用空间。

    下面的两张图表展示了实验室内部测试的结果,这些结果说明了与AEM 6.3相比,AEM 6.5的平均执行时间以及磁盘上的平均占用空间有所减少:

    如何配置完全压缩和尾压缩

    默认配置在工作日运行尾压缩,在星期日运行完全压缩。 可以使用新配置值更改默认配置 full.gc.days RevisionCleanupTask 维护任务 .

    当您配置 full.gc.days 值,完全压缩在值中定义的天数内运行,尾部压缩在值中未定义的天数内运行。 例如,如果将完全压缩配置为在星期日运行,则尾部压缩会在星期一到星期六运行。 例如,如果将完全压缩配置为在一周的每一天运行,则尾部压缩根本不会运行。

    此外,请考虑:

  • 尾部压缩 效率较低,且对系统正常运行的影响较小。 因此,它打算在工作日运行。
  • 完全压缩 不仅效率更高,而且对系统正常运行的影响也更大。 因此,它打算在工作日使用。
  • 尾部压缩和完全压缩都应安排在非高峰时段运行。
  • 在使用新的压缩模式时,请牢记以下事项:

  • 您可以监视输入/输出(I/O)活动,例如:I/O操作、等待IO的CPU、提交队列大小。 这有助于确定系统是否正在受到I/O绑定并需要升级。
  • RevisionCleanupTaskHealthCheck 指示联机修订版清理的整体运行状况状态。 它的工作方式与AEM 6.3中相同,并且不区分完全压实和尾部压实。
  • 日志消息包含有关压缩模式的相关信息。 例如,当“联机修订版清理”启动时,相应的日志消息指示压缩模式。 此外,在某些角落情况下,当计划运行尾压缩并且日志消息指示此更改时,系统恢复为完全压缩。 以下日志示例指示了压实模式以及从尾部到完全压实的变化:
  • TarMK GC: running tail compaction
    TarMK GC: no base state available, running full compaction instead
    

    有时候,尾部模式和完全压实模式之间的切换会延迟清理过程。 更准确地说,存储库在完全压缩(其大小翻了一番)后将会增长。 当存储库低于完全压缩前的大小时,在后续尾压缩中回收额外的空间。 还应避免执行并行维护任务。

    建议磁盘大小至少比最初估计的存储库大小大两到三倍。

    联机修订清理常见问题解答

    AEM 6.5升级注意事项

    升级到AEM 6.5时应该了解什么?

    TarMK的持久性格式随AEM 6.5而改变。这些更改不需要主动迁移步骤。 现有存储库会经历滚动迁移,这对用户是透明的。 首次访问AEM 6.5(或相关工具)存储库时,将启动迁移过程。

    迁移到AEM 6.5持久性格式启动后,存储库无法恢复为以前的AEM 6.3持久性格式。

    迁移到Oak区段Tar

    为什么需要迁移存储库?

    在AEM 6.3中,需要对存储格式进行更改,特别是为了提高在线修订清理的性能和效率。 这些更改无法向后兼容,并且必须迁移使用旧Oak区段(AEM 6.2及更低版本)创建的存储库。

    更改存储格式的其他好处:

  • 更好的可扩展性(优化的区段大小)。
  • 更快 数据存储垃圾收集.
  • 为未来的增强功能做基础工作。
  • 运行联机修订版清理时,对磁盘空间和栈内存的最低要求是什么?

    在线修订版清理期间持续监视磁盘空间。 如果可用磁盘空间下降到某个关键值以下,则该过程将取消。 该关键值是存储库当前磁盘占用空间的25%,并且不可配置。

    Adobe建议磁盘大小至少比最初估计的资料档案库大小大两到三倍。

    在清理过程中,会持续监控可用栈空间。 如果可用栈空间下降到某个临界值以下,则该过程将取消。 通过org.apache.jackrabbit.oak.segment.SegmentNodeStoreService#MEMORY_THRESHOLD配置临界值。 默认值为15%。

    Recommendations的最小压缩栈大小建议与AEM内存大小建议没有区分。 一般而言: 如果AEM实例的大小足以处理用例及其上的预期有效负载,则清理过程将获得足够的内存。

    运行“联机修订清理”时,预期的性能影响是什么? 在线修订版清理是一个后台进程,它同时从存储库读取和写入到正常系统操作。 特别是,它可能需要在短时间内获得对存储库的独占访问权限,以防止其他线程写入存储库。 预计联机修订版清理运行多长时间? 根据内部执行的最新性能测试Adobe,运行时间不应超过两个小时。 如果联机修订清理需要更长时间,应该做什么?
  • 确保每天执行一次。
  • 通过相应地配置操作功能板中的维护窗口,确保在最小的存储库活动期间执行该操作。
  • 扩展系统资源(CPU、内存、I/O)。
  • 为何跳过修订垃圾收集?

    修订清理依赖估计阶段来确定是否有足够的垃圾要清理。 估算器将当前大小与上次压缩后的存储库大小进行比较。 如果大小超过配置的增量,则运行清理。 大小增量设置为1 GB。 这实际上意味着,如果自上次清理运行以来,存储库大小没有增加1 GB,则会跳过新的修订版清理迭代。

    以下为估计阶段的相关日志条目:

  • 修订版GC运行: 大小增量为N%或N/N (N/N字节),因此运行压缩
  • 修订版GC会 运行: 大小增量为N%或N/N (N/N字节),因此现在将跳过压缩
  • 如果并行写入存储库的干扰过多,会发生什么情况?

    如果系统中存在写并发,则联机修订版清理可能需要独占写入权限,才能在压缩周期结束时提交更改。 系统进入 forceCompact模式,有关更多详细信息,请参见 Oak文档. 在强制压缩期间,获得排他性写锁定以最终提交更改而不受任何并行写干扰。 要限制对响应时间的影响,可以定义超时值。 默认情况下,此值设置为1分钟,这意味着如果强制压缩未在一分钟内完成,则压缩过程将中止,以支持并发提交。

    力压缩的持续时间取决于以下因素:

  • 硬件:特别是IOPS。 持续时间会随着IOPS的增加而缩短。
  • 区段存储大小:持续时间随区段存储的大小而增加。
  • 在Windows环境中,将始终强制进行常规文件访问,以便不使用内存映射访问。 作为一般建议,应将所有可用的RAM分配给栈,并增加segmentCache大小。 您可以通过将segmentCache.size选项添加到org.apache.jackrabbit.oak.segment.SegmentNodeStoreService.config(例如segmentCache.size=20480)来增加segmentCache。 切记不要为操作系统和其他进程留出一些RAM。
  • 在非Windows环境中,增加物理内存的大小以改进存储库的内存映射。
  • 可在何处找到上次联机修订清理执行的统计信息?

    状态、进度和统计信息通过JMX (SegmentRevisionGarbageCollection MBean)。 欲知关于 SegmentRevisionGarbageCollection MBean,阅读 以下段落.

    可以通过以下方式跟踪进度 EstimatedRevisionGCCompletion 的属性 SegmentRevisionGarbageCollection MBean.

    可以使用获取MBean的引用 ObjectName org.apache.jackrabbit.oak:name="Segment node store revision garbage collection",type="SegmentRevisionGarbageCollection".

    统计信息仅在上次系统启动后可用。 可以使用外部监控工具将数据保留在AEM正常运行时间以外。 参见 有关将运行状况检查附加到Nagios的AEM文档,作为外部监控工具的示例.

    相关日志条目是什么?
  • 联机修订清理已启动/停止
  • 在线修订清理由三个阶段组成:估计、压缩和清理。 如果存储库未包含足够的垃圾,估算可能会强制跳过压缩和清理。 在最新版本的AEM中,将显示消息“TarMK GC #{}: estimation started”标记估算的开头, “TarMK GC #{}: compaction started, strategy={}”标记压缩的开头,而“T”arMK GC #{}: cleanup started. Current repository size is {} ({} bytes”标记清理的开始。
  • 通过修订清理获得的磁盘空间
  • 仅在清理阶段完成时才回收空间。 清理阶段的结束用日志消息“T”标记arMK GC #{}: cleanup completed in {} ({} ms“。 后清理大小为 {} ({} 字节)和回收的空间 {} ({} 字节)。 压缩图粗细/深度为 {}/{} ({} 字节/{})。”。
  • 修订清理期间出现问题
  • 有许多故障情况,所有情况都标有以“TarMK GC”开头的WARN或ERROR日志消息。
  • 另外,请参见 基于错误消息的故障排除 部分。

    如何检查联机修订清理完成后回收了多少空间? 在清理周期结束时,日志中会显示一条消息:“TarMK GC #3: cleanup completed“ ,包括存储库的大小和回收的垃圾量。 在线修订版清理完成后,如何检查存储库的完整性?

    在线修订版清理后不需要存储库完整性检查。

    但是,您可以执行以下操作来检查清除后的存储库状态:

  • 存储库 遍历检查
  • 清理过程完成后使用oak-run工具检查是否存在不一致。 有关如何执行此操作的更多信息,请查看 Apache文档。 您无需关闭AEM即可运行该工具。
  • 如何在备用实例上监视自动清理?

    使用通过JMX公开状态、进度和统计信息 SegmentRevisionGarbageCollection MBean。 另请参阅以下内容 Oak文档.

    可以使用以下方法获取MBean的引用 ObjectName org.apache.jackrabbit.oak:name="Segment node store revision garbage collection",type="SegmentRevisionGarbageCollection".

    统计信息仅在上次系统启动后可用。 可以使用外部监控工具将数据保留在AEM正常运行时间以外。 另请参阅 有关将运行状况检查附加到Nagios的AEM文档,作为外部监控工具的示例.

    日志文件还可用于检查自动清理的状态、进度和统计信息。

    在自动清理待机实例期间必须监视哪些内容?

  • 运行自动清理时应监视磁盘空间。
  • 完成时间(通过日志)以确保不超过2小时。
  • 运行自动清理后的区段存储大小。 备用实例上的区段存储大小应该与主实例上的区段存储大小大致相同。
  • 根据日志中的信息,采取适当措施:
  • 如果日志显示五个错过的压缩周期和一个超时, forceCompact 周期,将维护窗口安排在存储库写入量较少时的安静时间。 您可以在存储库量度监控工具中检查存储库写入 https://serveraddress:serverport/libs/granite/operations/content/monitoring/page.html
  • 如果清理在维护窗口结束时停止,请确保维护任务用户界面中维护窗口的配置足够大
  • 如果可用的栈内存不足,请确保实例有足够的内存。
  • 如果反应较晚,区段存储可能会增长太多,以致于线上修订清理无法在较长的维护时段内完成。 例如,如果上周未成功完成在线修订清理,则建议规划离线维护,并运行离线修订清理,以将区段存储恢复到可管理的大小。
  • 导致原因 SegmentNotFoundException 要登录的实例 error.log 我该如何恢复?

    A SegmentNotFoundException 当TarMK尝试访问其无法找到的存储单元(区段)时,会记录该信息。 有三种情况可能会导致此问题:

  • 一种应用程序,绕过建议的访问机制(如Sling和JCR API),使用较低级别的API/SPI访问存储库,然后超过区段的保留时间。 也就是说,它保留对实体的引用,保留时间比在线修订版清理允许的保留时间(默认为24小时)长。 此情况是暂时性的,不会导致数据损坏。 要恢复,应使用oak-run工具确认异常的瞬态性质(oak-run检查不应报告任何错误)。 为此,实例必须离线并重新启动。
  • 外部事件导致磁盘上的数据损坏。 这可能是由于磁盘故障、磁盘空间不足或意外修改了所需的数据文件所致。 在这种情况下,实例必须离线并使用oak-run检查进行修复。 有关如何执行oak-run检查的更多详细信息,请阅读以下内容 Apache文档.
  • 通过,解决所有其他发生的问题 Adobe客户关怀.
  • TarMK GC #2:压缩已取消: ${REASON}. 压缩阶段提前终止。 可能中断压缩阶段的一些事件示例:主机系统上的内存或磁盘空间不足。 此外,还可以通过关闭系统或通过管理界面(如操作仪表板中的维护窗口)显式取消系统来取消压缩。 这取决于你的原因 TarMK GC#2:经过5次循环,压实时间为32.902 min(1974140 ms)。 此消息并不表示存在不可恢复的错误,而只表示在尝试了一些之后压缩已终止。 此外,请阅读 在段落之后。 阅读以下内容 Oak文档,以及运行联机修订清理部分的最后一个问题。 TarMK GC #2:清理已中断。 通过关闭存储库已取消清理。 预计一致性不会受到影响。 此外,磁盘空间很可能不会完全回收。 它将在下一个修订版清理周期中回收。 调查存储库关闭的原因,并尝试避免在维护时段关闭存储库。

    使用版本号(主要和次要)与AEM安装的Oak核心版本匹配的Oak-run工具版本。 例如,如果您的AEM实例具有Oak核心版本1.22.x,则您应使用最新版本的Oak-run tool 1.22.x。

    Adobe提供了一个名为的工具 Oak-run 以执行修订清理。 它可以在以下位置下载:

    https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/

    该工具是一个可运行的jar,可以手动运行以压缩存储库。 此过程称为脱机修订版清理,因为必须关闭存储库才能正确运行该工具。 确保根据维护窗口计划清理。

    有关如何提高清理过程性能的提示,请参阅 提高脱机修订清理的性能.

    您还可以在进行维护之前清除旧检查点(以下过程中的步骤2和3)。 仅对于具有100个以上检查点的实例,建议执行此操作。

    -mmap。 您可以将此参数设置为true或false。 如果设置为true,则使用内存映射访问。 如果设置为false,则使用文件访问。 如果未指定,则在64位系统上使用内存映射访问,在32位系统上使用文件访问。 在Windows上,始终强制定期访问文件,并且此选项被忽略。 此参数已替换 — Dtar.memoryMapped参数。

    -Dupdate.limit. 定义将临时事务刷新到磁盘的阈值。 默认值为 10000。

    -Dcompress间隔. 在压缩当前映射之前要保留的压缩映射条目数。 默认值为1000000。 如果有足够的栈内存可用,则应该将此值增加到更高的数值,以加快吞吐量。 此参数已在Oak版本1.6中删除,没有任何效果。

    -Dcompaction-progress-log. 记录的压缩节点数。 默认值为150000,这意味着在操作期间记录前150000个压缩节点。 将此参数与下面记录的下一个参数一起使用。

    -Dtar.PersistCompactionMap。 将此参数设置为true可使用磁盘空间而不是栈内存来保持压缩映射持久性。 需要oak-run工具 版本1.4 以及更高版本。 欲知更多详情,请参见 脱机修订版清理常见问题解答 部分。 此参数已在Oak版本1.6中删除,没有任何效果。

    — 强制。 强制压缩并忽略不匹配的区段存储版本。

    使用 --force 参数可将区段存储升级为最新版本,该版本与旧版Oak不兼容。 此外,请考虑一下,降级是不可能的。 通常,应谨慎使用这些参数,并且仅在您了解如何使用这些参数的情况下使用。

    正在使用的参数示例:

    java -Dupdate.limit=10000 -Dcompaction-progress-log=150000 -Dlogback.configurationFile=logback.xml -Xmx8g -jar oak-run-*.jar checkpoints <repository>
    

    触发修订清除的其他方法

    除了上述方法之外,您还可以使用JMX控制台触发修订清除机制,如下所示:

  • 打开JMX控制台,方法是转到 http://localhost:4502/system/console/jmx
  • 单击 RevisionGarbageCollection MBean。
  • 在下一个窗口中,单击 startRevisionGC() 然后 调用 以启动修订垃圾收集作业。
  • 脱机修订版清理常见问题解答

    决定脱机修订版清理持续时间的因素是什么?

    存储库大小和必须清理的修订版本数决定了清理的持续时间。

    修订版本和页面版本之间有何区别?
  • Oak修订版: Oak在一个由节点和属性组成的大型树层次结构中组织所有内容。 此内容树的每个快照或修订版本都是不可变的,对树所做的更改以一系列新修订版本表示。 通常,每个内容修改都会触发新的修订。 另请参阅 关注链接.
  • 页面版本: 版本控制可在特定时间点创建页面的“快照”。 通常,新版本会在激活页面时创建。 有关更多信息,请参阅 使用页面版本.
  • 如果“离线修订清理”任务未在8小时内完成,如何加快该任务的速度? 如果修订版任务未在8小时内完成,并且 线程转储 显示主要热点为 InMemoryCompactionMap.findEntry,在oak-run工具中使用以下参数 版本1.4 或更高版本: -Dtar.PersistCompactionMap=true. 此 -Dtar.PersistCompactionMap 参数已在Oak版本1.6中移除。