存储库的每次更新都会创建一个内容修订版本。 因此,每次更新后,存储库的大小都会增大。 必须清理旧修订版本以释放磁盘资源 — 这对于避免不受控制的存储库增长非常重要。 此维护功能称为修订版清理。 自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 介绍 两种新模式 对于 压缩 联机版本清理过程的阶段:
这些压实方式构成了效率与资源消耗之间的权衡:尾压实效果较差,对系统正常运行的影响也较小。 相比之下,完全压实更有效,但对系统正常运行的影响更大。
AEM 6.5还在压缩期间引入了更有效的内容去重机制,从而进一步减少了存储库在磁盘上的占用空间。
下面的两张图表展示了实验室内部测试的结果,这些结果说明了与AEM 6.3相比,AEM 6.5的平均执行时间以及磁盘上的平均占用空间有所减少:
默认配置在工作日运行尾压缩,在星期日运行完全压缩。 可以使用新配置值更改默认配置 full.gc.days
的 RevisionCleanupTask
维护任务.
当您配置 full.gc.days
值,完全压缩在值中定义的天数内运行,尾部压缩在值中未定义的天数内运行。 例如,如果将完全压缩配置为在星期日运行,则尾部压缩会在星期一到星期六运行。 例如,如果将完全压缩配置为在一周的每一天运行,则尾部压缩根本不会运行。
此外,请考虑:
在使用新的压缩模式时,请牢记以下事项:
RevisionCleanupTaskHealthCheck
指示联机修订版清理的整体运行状况状态。 它的工作方式与AEM 6.3中相同,并且不区分完全压实和尾部压实。TarMK GC: running tail compaction
TarMK GC: no base state available, running full compaction instead
有时候,尾部模式和完全压实模式之间的切换会延迟清理过程。 更准确地说,存储库在完全压缩(其大小翻了一番)后将会增长。 当存储库低于完全压缩前的大小时,在后续尾压缩中回收额外的空间。 还应避免执行并行维护任务。
建议磁盘大小至少比最初估计的存储库大小大两到三倍。
问题 | 答案 |
升级到AEM 6.5时应该了解什么? | TarMK的持久性格式随AEM 6.5而改变。这些更改不需要主动迁移步骤。 现有存储库会经历滚动迁移,这对用户是透明的。 首次访问AEM 6.5(或相关工具)存储库时,将启动迁移过程。 迁移到AEM 6.5持久性格式启动后,存储库无法恢复为以前的AEM 6.3持久性格式。 |
问题 | 答案 | |
为什么需要迁移存储库? | 在AEM 6.3中,需要对存储格式进行更改,特别是为了提高在线修订清理的性能和效率。 这些更改无法向后兼容,并且必须迁移使用旧Oak区段(AEM 6.2及更低版本)创建的存储库。 更改存储格式的其他好处:
|
|
是否仍支持以前的Tar格式? | AEM 6.3或更高版本仅支持新的Oak区段Tar。 | |
内容迁移是否始终是强制性的? | 是。除非从新的实例开始,否则将始终需要迁移内容。 | |
我是否可以升级到6.3或更高版本,并稍后执行迁移(例如,使用另一个维护窗口)? | 否,如上所述,内容迁移是强制性的。 | |
迁移时能否避免停机? | 否. 这是一次性工作,无法在正在运行的实例上完成。 | |
如果我意外针对错误的存储库格式运行,会发生什么情况? | 如果您尝试对oak-segment-tar存储库运行oak-segment模块(反之亦然),则启动失败 IllegalstateException 并显示“区段格式无效”消息。 没有发生数据损坏。 | |
是否需要重新索引搜索索引? | 否. 从oak-segment迁移到oak-segment-tar会导致容器格式发生更改。 包含的数据不受影响,也不会被修改。 | |
如何以最佳方式计算迁移期间和迁移后所需的预期磁盘空间? | 迁移等同于以新格式重新创建区段存储。 这可用于估计迁移期间所需的额外磁盘空间。 迁移后,可以删除旧区段存储以回收空间。 | |
如何以最佳方式估计迁移的持续时间? | 在以下情况下,迁移性能可大大提高 脱机修订版清理 在迁移之前执行。 建议所有客户将它作为升级过程的先决条件执行。 通常,迁移的持续时间应与脱机修订清除任务的持续时间相似,假定已在迁移之前执行了脱机修订清除任务。 |
问题 | 答案 | |
应多久执行一次联机修订清理? | 每日一次. 这是操作功能板中的默认配置。 | |
如何配置联机修订版清理维护任务的开始时间? | 请参阅 如何运行联机修订版清理 部分。 | |
是否存在不应当超出联机修订版清理的最大频率? | 建议每天运行一次联机修订清理,如默认配置。 |
|
哪些关键指标决定了运行联机修订清除的频率? | 无需确定频率,因为“在线修订版清理”配置为维护任务,并且每天自动运行。 | |
首次运行联机修订清理时,为何不回收任何空间? | 联机修订清理按层代回收旧修订。 每次运行修订清理时都会生成新的生成。 只有至少两代的内容才会被回收,这意味着在第一次运行中没有任何可回收的内容。 | |
在离线修订版清理后运行时,为什么首次在线修订版清理不会回收任何空间? | 脱机修订清理正在回收除最新一代以外的所有内容,而联机修订清理则使用最新两代。 如果有新的存储库,则联机修订版清理在脱机修订版清理后首次执行时不会回收任何空间,因为没有足够旧的层代可以回收。 此外,请参阅的“脱机修订版清理后运行联机修订版清理”部分 本章. |
|
“创作”和“发布”通常会有不同的联机修订版清理窗口吗? | 这取决于办公时间和客户在线状态的流量模式。 维护窗口应在主要生产时间之外进行配置,以实现最佳清理效果。 对于多个AEM Publish实例(TarMK场),用于在线修订版清理的维护窗口应交错进行。 | |
运行在线修订版清理之前是否有任何先决条件? | 只有AEM 6.3及更高版本才提供联机修订版清理。 此外,如果您使用的是较低版本的AEM,则必须迁移到新的 Oak段Tar. |
|
决定在线修订版清理持续时间的因素是什么? | 这些因素包括:
|
|
运行联机修订清理时,作者是否仍可工作? | 是,联机修订清理可以处理并发写入。 但是,“在线修订清理”无需并发写入事务即可更快、更高效地工作。 Adobe建议将“在线修订清理”维护任务安排在相对安静的时间段,不会有太多流量。 | |
运行联机修订版清理时,对磁盘空间和栈内存的最低要求是什么? | 在线修订版清理期间持续监视磁盘空间。 如果可用磁盘空间下降到某个关键值以下,则该过程将取消。 该关键值是存储库当前磁盘占用空间的25%,并且不可配置。 Adobe建议磁盘大小至少比最初估计的资料档案库大小大两到三倍。 在清理过程中,会持续监控可用栈空间。 如果可用栈空间下降到某个临界值以下,则该过程将取消。 通过org.apache.jackrabbit.oak.segment.SegmentNodeStoreService#MEMORY_THRESHOLD配置临界值。 默认值为15%。 Recommendations的最小压缩栈大小建议与AEM内存大小建议没有区分。 一般而言: 如果AEM实例的大小足以处理用例及其上的预期有效负载,则清理过程将获得足够的内存。 |
|
运行“联机修订清理”时,预期的性能影响是什么? | 在线修订版清理是一个后台进程,它同时从存储库读取和写入到正常系统操作。 特别是,它可能需要在短时间内获得对存储库的独占访问权限,以防止其他线程写入存储库。 | |
预计联机修订版清理运行多长时间? | 根据内部执行的最新性能测试Adobe,运行时间不应超过两个小时。 | |
如果联机修订清理需要更长时间,应该做什么? |
|
|
如果联机修订版清理超出配置的维护窗口,会发生什么情况? | 确保其他维护任务不会延迟其执行。 如果在同一维护窗口中执行比“联机修订版清理”更多的维护任务,则可能会出现这种情况。 维护任务按顺序运行,没有可配置的顺序。 | |
为何跳过修订垃圾收集? | 修订清理依赖估计阶段来确定是否有足够的垃圾要清理。 估算器将当前大小与上次压缩后的存储库大小进行比较。 如果大小超过配置的增量,则运行清理。 大小增量设置为1 GB。 这实际上意味着,如果自上次清理运行以来,存储库大小没有增加1 GB,则会跳过新的修订版清理迭代。 以下为估计阶段的相关日志条目:
|
|
如果性能影响太大,是否可以安全地中止自动压缩? | 是。自AEM 6.3起,可通过“操作功能板”中的“维护任务窗口”或通过JMX安全地停止它。 | |
如果AEM实例在计划的清理任务期间关闭,进程是否安全中止,或者是否阻止关闭,直到压缩完成? | 修订版清理被中断,存储库将安全关闭。 | |
在联机修订清理期间系统崩溃时会发生什么情况? | 在这种情况下,不存在数据损坏的风险。 后续运行将清理垃圾剩余。 | |
不运行联机修订清理会产生什么影响? | 性能会随着时间的推移而下降。 | |
正在收集哪些修订? | 默认情况下,“联机修订版清理”仅收集至少24小时之前的修订版。 | |
如果并行写入存储库的干扰过多,会发生什么情况? | 如果系统中存在写并发,则联机修订版清理可能需要独占写入权限,才能在压缩周期结束时提交更改。 系统进入 forceCompact模式,有关更多详细信息,请参见 Oak文档. 在强制压缩期间,获得排他性写锁定以最终提交更改而不受任何并行写干扰。 要限制对响应时间的影响,可以定义超时值。 默认情况下,此值设置为1分钟,这意味着如果强制压缩未在一分钟内完成,则压缩过程将中止,以支持并发提交。 力压缩的持续时间取决于以下因素:
|
|
如何在备用实例上执行联机修订清理? |
在冷备用设置中,只有主实例必须配置为运行联机修订版清理。 在备用实例上,无需特别计划联机修订版清理。 备用实例上的相应操作是“自动清理” — 这与“联机修订版清理”的清理阶段相对应。 在主实例上执行“联机修订版清理”后,在备用实例上运行自动清理。 估算和压缩阶段不会在备用实例上运行。 |
|
脱机修订版清理是否比联机修订版清理能够释放更多的磁盘空间? | 脱机修订版清理可以立即删除旧修订,而联机修订版清理必须考虑应用程序栈栈仍在引用的旧修订。 因此,前者可以比后者更积极地清除垃圾,其效果在几个垃圾收集周期内摊销。 此外,请参阅的“脱机修订版清理后运行联机修订版清理”部分 本章. |
|
有关内存映射文件操作的任何注意事项? |
|
|
在联机修订清理期间必须监视哪些内容? |
|
|
如何检查联机修订清理是否已成功完成? | 您可以通过检查日志来检查联机修订版清理是否成功完成。 例如,“ 相应地,还有一条消息“ |
|
可在何处找到上次联机修订清理执行的统计信息? | 状态、进度和统计信息通过JMX ( 可以通过以下方式跟踪进度 可以使用获取MBean的引用 统计信息仅在上次系统启动后可用。 可以使用外部监控工具将数据保留在AEM正常运行时间以外。 参见 有关将运行状况检查附加到Nagios的AEM文档,作为外部监控工具的示例. |
|
相关日志条目是什么? |
另外,请参见 基于错误消息的故障排除 部分。 |
|
如何检查联机修订清理完成后回收了多少空间? | 在清理周期结束时,日志中会显示一条消息:“TarMK GC #3: cleanup completed “ ,包括存储库的大小和回收的垃圾量。 |
|
在线修订版清理完成后,如何检查存储库的完整性? | 在线修订版清理后不需要存储库完整性检查。 但是,您可以执行以下操作来检查清除后的存储库状态: |
|
如何检测联机修订版清理是否失败,以及要恢复的步骤是什么? | 故障情况由以“TarMK GC”开头的WARN或ERROR日志消息标记。 另外,请参见 基于错误消息的故障排除 部分。 | |
修订版清理运行状况检查中会公开哪些信息? 它们如何以及何时对颜色编码状态级别做出贡献? | 修订版清理运行状况检查是 操作功能板. 状态为 绿色 如果上次执行联机修订清除维护任务成功完成。 它是 黄色 如果联机修订版清理维护任务被取消一次。 它是 红色 如果“联机修订版清理”维护任务连续取消三次。 在这种情况下,需要手动交互 或“联机修订清理”可能再次失败。 有关详细信息,请阅读 疑难解答 部分。 另请注意,系统重新启动后,运行状况检查状态将被重置。 因此,新重新启动的实例在修订清理运行状况检查中显示为绿色状态。 可以使用外部监控工具将数据保留在AEM正常运行时间以外。 参见 有关将运行状况检查附加到Nagios的AEM文档,作为外部监控工具的示例. |
|
如何在备用实例上监视自动清理? |
使用通过JMX公开状态、进度和统计信息 可以使用以下方法获取MBean的引用 统计信息仅在上次系统启动后可用。 可以使用外部监控工具将数据保留在AEM正常运行时间以外。 另请参阅 有关将运行状况检查附加到Nagios的AEM文档,作为外部监控工具的示例. 日志文件还可用于检查自动清理的状态、进度和统计信息。 |
|
在自动清理待机实例期间必须监视哪些内容? |
|
如果不运行联机修订清理,会出现什么最坏的情况? | AEM实例的磁盘空间不足,这会导致生产中断。 | |
在发布实例上运行在线修订清理时,高用户流量是否有问题? | 高用户流量会影响压缩阶段是否能够成功完成。 |
|
根据“运行状况检查”和日志条目,“联机修订版清理”连续三次未成功完成。 成功完成联机修订清理需要什么条件? | 您可以采取几个步骤来查找并修复问题:
|
|
启用Healthcheck警报后必须做什么? | 请参阅上一点。 | |
如果在线修订版清理在计划的维护时段内超时,会发生什么情况? | 在线修订版清理已取消,剩余的已删除。 下次安排维护时段时,它会再次启动。 | |
导致原因 SegmentNotFoundException 要登录的实例 error.log 我该如何恢复? |
A
|
如果在联机修订清理过程中发生事件,则error.log将冗长。 下表旨在说明最常见的报文并提供可能的解决方案:
阶段 | 日志消息 | 解释 | 后续步骤 |
---|---|---|---|
估计 | TarMK GC #2:已跳过估计,因为压缩已暂停。 | 如果配置在系统上禁用压缩,则会跳过估计阶段。 | 启用联机修订版清理。 |
不适用 | TarMK GC #2:估计中断: ${REASON}. 正在跳过压缩。 | 估计相位提前终止。 可能中断估计阶段的一些事件示例:主机系统上的内存或磁盘空间不足。 | 这取决于你的原因 |
压缩 | TarMK GC #2:压缩已暂停。 | 只要压实阶段通过配置暂停,估计阶段和压实阶段都不会运行。 | 启用联机修订清理。 |
不适用 | 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个以上检查点的实例,建议执行此操作。
始终确保您有最近备份的AEM实例。
关闭AEM。
(可选)使用该工具查找旧检查点:
java -jar oak-run.jar checkpoints install-folder/crx-quickstart/repository/segmentstore
(可选)然后,删除未引用的检查点:
java -jar oak-run.jar checkpoints install-folder/crx-quickstart/repository/segmentstore rm-unreferenced
运行压缩并等待其完成:
java -jar -Dsun.arch.data.model=32 oak-run.jar compact install-folder/crx-quickstart/repository/segmentstore
oak-run工具引入了多种功能,旨在提高修订清理过程的性能,并尽可能缩短维护窗口。
该列表包括几个命令行参数,如下所述:
-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控制台触发修订清除机制,如下所示:
决定脱机修订版清理持续时间的因素是什么? | 存储库大小和必须清理的修订版本数决定了清理的持续时间。 |
修订版本和页面版本之间有何区别? | |
如果“离线修订清理”任务未在8小时内完成,如何加快该任务的速度? | 如果修订版任务未在8小时内完成,并且 线程转储 显示主要热点为 InMemoryCompactionMap.findEntry ,在oak-run工具中使用以下参数 版本1.4 或更高版本: -Dtar.PersistCompactionMap=true . 此 -Dtar.PersistCompactionMap 参数已在Oak版本1.6中移除。 |