对存储库的每次更新都会创建新的内容修订版本。 因此,每次更新时,存储库的大小都会增大。 为避免存储库增长失控,需要清理旧的修订版本以释放磁盘资源。 此维护功能称为修订清理。 它自AEM 6.0起便已作为离线例程使用。
在AEM 6.3中,引入了此功能的在线版本“在线修订清理”。 与必须关闭AEM实例的离线修订版清理相比,在AEM实例处于在线状态时可以运行在线修订版清理。 默认情况下,联机修订版清理处于打开状态,这是执行修订版清理的推荐方式。
注意: 有关介 绍和如何使用在线修订清理,请参阅视频。
修订清理过程包含三个阶段:估计、压缩和清理。 估计根据可能收集的垃圾量确定是否运行下一阶段(压缩)。 在压缩阶段期间,区段和tar文件将被重写,留下任何未使用的内容。 清理阶段随后删除旧段,包括它们可能包含的任何垃圾。 脱机模式通常可以节省更多空间,因为联机模式需要考虑AEM工作集,该工作集会保留未收集的额外区段。
有关修订清理的更多详细信息,请参阅以下链接:
此外,您还可以阅读官方Oak文档。
联机修订版清理是执行修订版清理的推荐方法。 脱机修订版清理应仅在特殊情况下使用 — 例如,在迁移到新存储格式之前,或者如果Adobe客户关怀部门要求您执行此操作,则应使用此清理。
默认情况下,联机修订版清理配置为在AEM创作实例和发布实例上每天自动运行一次。 您只需定义在用户活动最少的时段内的维护窗口即可。 可以按如下方式配置联机修订版清理任务:
在主AEM窗口中,转到工具 — 操作 — 功能板 — 维护,或将您的浏览器指向:https://serveraddress:serverport/libs/granite/operations/content/maintenance.html
将鼠标悬停在每日维护窗口上,然后单击设置图标。
输入所需的值(循环、开始时间、结束时间),然后单击Save。
或者,如果要手动运行修订清理任务,则可以:
转到工具 — 操作 — 功能板 — 维护或直接浏览到https://serveraddress:serverport/libs/granite/operations/content/maintenance.html
单击每日维护窗口。
将鼠标悬停在修订版清理图标上。
单击运行。
修订清理过程按代回收旧的修订。 这意味着每次运行修订清理时,都会在磁盘上创建并保留新一代。 但是,两种类型的修订清理之间存在差异:脱机修订版清理保留一代,而联机修订版清理保留两代。 因此,在离线修订清理之后运行在线修订清理时,会发生以下情况:
此外,请记住,根据提交的类型和数量,每代提交的大小与上一代提交的大小不同,因此最终大小可能会因运行而异。
因此,建议将磁盘的大小至少比最初估计的存储库大小大2或3倍。
AEM 6.4 为在线 修订 清理过 程的压缩阶段引入了两个新模型:
这些压缩模式在效率和资源消耗之间构成了权衡:尾部压实效果较差,对正常系统运行影响较小。 相比之下,完全压实效果更好,但对系统正常运行的影响更大。
AEM 6.4还在压缩期间引入了更高效的内容重复数据删除机制,从而进一步减少存储库的磁盘空间占用。
下图显示了AEM 6.4中平均执行时间和磁盘平均占用空间比AEM 6.3减少的内部实验室测试结果:
默认配置在周天运行尾部压缩,在周日运行完全压缩。 使用RevisionCleanupTask
维护任务的新配置值full.gc.days
可以更改默认配置。
配置full.gc.days
值时,请注意,完全压缩将在值中定义的日期期间运行,而尾部压缩将在值中未定义的日期期间运行。 例如,如果将完全压缩配置为在星期日运行,则尾部压缩将在星期一到星期六运行。 例如,如果将完全压缩配置为在一周的每一天运行,则尾部压缩根本不会运行。
此外,还考虑到:
使用新的压缩模式时,请记住以下事项:
RevisionCleanupTaskHealthCheck
表示联机修订版清理的整体运行状况状态。 它的工作方式与AEM 6.3中相同,不区分完整压缩和尾部压缩。TarMK GC: running tail compaction
TarMK GC: no base state available, running full compaction instead
在某些情况下,尾部和完全压缩模式之间的交替会延迟清理过程。 更准确地说,在完全压缩后,存储库将会增加(其大小将翻倍)。 当存储库将降低到预完全压缩大小以下时,将在后续尾部压缩中回收额外空间。 还应避免并行维护任务执行。
建议将磁盘的大小至少比最初估计的存储库大小大2或3倍。
问题 | 答案 |
升级到AEM 6.4时,我应该注意什么? | AEM 6.4将更改TarMK的持久性格式。这些更改不需要主动迁移步骤。 现有存储库将进行滚动迁移,该迁移对用户是透明的。 在AEM 6.4(或相关工具)首次访问存储库时,将启动迁移过程。 迁移到AEM 6.4持久性格式后,存储库将无法还原为之前的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发布实例(TarMK场),联机修订版清理的维护窗口应该交错。 | |
运行在线修订清理之前是否存在任何先决条件? | 联机修订版清理仅在AEM 6.3及更高版本中可用。 此外,如果您使用的是旧版AEM,则需要迁移到新的Oak区段Tar。 |
|
哪些因素决定了在线修订清理的持续时间? | 因素包括:
|
|
在运行联机修订版清理时,作者是否仍可以工作? | 是的,联机修订版清理可以处理并发写入。 但是,在线修订清理工作可以更快、更高效地进行,而无需并发写入事务。 建议将“在线修订清理”维护任务安排在相对安静的时间,而没有大量流量。 | |
运行联机修订版清理时,对磁盘空间和堆内存的最低要求是什么? | 在联机修订版清理期间持续监视磁盘空间。 如果可用磁盘空间降至临界值以下,则该过程将被取消。 关键值是存储库当前磁盘占用量的25%,且不可配置。 建议将磁盘的大小至少比最初估计的存储库大小大2或3倍。 在清理过程中,会持续监控空闲堆空间。 如果可用堆空间降至临界值以下,则取消该进程。 临界值通过org.apache.jackrabbit.oak.segment.SegmentNodeStoreService#MEMORY_THRESHOLD进行配置。 默认值为15%。 Recommendations用于最小压缩堆大小调整建议与AEM内存大小调整建议之间没有分隔。 一般规则是:如果AEM实例的大小足够大,足以处理用例和预期的负载,则清理过程将获得足够的内存。 |
|
运行在线修订清理时预期的性能影响是什么? | 联机修订版清理是从存储库同时读取并写入到正常系统操作的后台进程。 特别是,它可能需要在短时间内获得对存储库的独占访问权限,以防止其他线程写入存储库。 | |
预期联机修订版清理将运行多长时间? | 根据我们在内部执行的最新性能测试,执行该测试不应超过2小时。 | |
如果联机修订版清理需要较长时间,应该怎么做? |
|
|
如果联机修订版清理超出配置的维护窗口,会发生什么情况? | 确保其他维护任务不会延迟其执行。 如果在同一维护窗口中执行的维护任务比联机修订版清理要多,则可能会出现这种情况。 请注意,维护任务是按顺序执行的,而不需要可配置的顺序。 | |
为何会跳过修订垃圾收集? | 修订清理依赖于评估阶段来确定是否有足够的垃圾需要清理。 估算器会将当前大小与上次压缩后存储库的大小进行比较。 如果大小超过配置的增量,则将运行清理。 大小增量设置为1 GB。 这实际上意味着,如果自上次清理运行以来存储库大小没有增加1 GB,则将跳过新的修订清理迭代。 以下是估计阶段的相关日志条目:
|
|
如果性能影响过大,是否可以安全地中止自动压缩? | 是. 自AEM 6.3起,可通过操作仪表板中的维护任务窗口或通过JMX安全地停止它。 | |
如果AEM实例在计划的清理任务期间关闭,进程是否会安全中止,还是在压缩完成之前会阻止关闭? | 修订清理将中断,并且存储库将安全关闭。 | |
在联机修订版清理期间系统崩溃时会发生什么情况? | 在此类情况下,不存在数据损坏的风险。 垃圾剩料将通过后续运行进行清理。 | |
未运行在线修订清理会产生什么影响? | 性能会随着时间的推移而下降。 | |
要收集哪些修订? | 默认情况下,联机修订版清理仅收集至少24小时之前的修订。 | |
如果并发写入存储库造成过多干扰,会出现什么情况? | 如果系统上存在写并发,则联机修订版清理可能需要独占写访问才能在压缩周期结束时提交更改。 系统将进入forceCompact模式,如oak文档中详细说明。 在强制紧凑期间,获取独占写锁定以最终提交更改而不产生任何并发写入干扰。 要限制对响应时间的影响,可定义超时值。 默认情况下,此值设置为1分钟,这意味着如果强制压缩在1分钟内未完成,则压缩过程将中止,以支持并发提交。 紧凑力的持续时间取决于以下因素:
|
|
如何在备用实例上执行联机修订版清理? |
在冷备用设置中,只需要将主实例配置为运行联机修订版清理。 在备用实例上,无需专门计划联机修订版清理。 备用实例上的相应操作是自动清理 — 它对应于联机修订版清理的清理阶段。 在主实例上执行在线修订版清理后,将在备用实例上运行自动清理。 估计阶段和压缩阶段将不会在备用实例上运行。 |
|
脱机修订版清理是否能够释放比联机修订版清理更多的磁盘空间? | 脱机修订版清理可以立即删除旧修订版,而联机修订版清理需要考虑应用程序堆栈仍引用的旧修订版。 因此,前者比后者更积极地去除垃圾,后者在几个垃圾收集周期期间对其效果进行摊销。 此外,请阅读本章的“脱机修订版清理后运行联机修订版清理”部分。 |
|
有关内存映射文件操作的任何注意事项? |
|
|
在联机修订清理期间需要监控哪些内容? |
|
|
如何检查联机修订版清理是否成功完成? | 您可以通过检查日志来检查联机修订版清理是否成功完成。 例如,“ 相应地,出现消息“ |
|
在哪里可以找到上次在线修订清理执行的统计信息? | 状态、进度和统计信息通过JMX( 可通过 可以使用 请注意,统计信息仅在上次系统启动后才可用。 利用外部监控工具,可让数据超出AEM正常运行时间。 请参阅将运行状况检查附加到Nagios的AEM文档,作为外部监控工具的示例。 |
|
相关的日志条目是什么? |
另请参阅下面的根据错误消息进行疑难解答部分。 |
|
如何检查在线修订清理完成后回收了多少空间? | 清理周期结束时,日志中会显示一条消息:“TarMK GC #3: cleanup completed ”,其中包括存储库的大小和回收垃圾的数量。 |
|
在线修订清理完成后如何检查存储库的完整性? | 在联机修订清理之后,无需检查存储库完整性。 但是,您可以执行以下操作,以在清理后检查存储库状态: |
|
如何检测联机修订版清理是否失败以及要恢复的步骤是什么? | 失败条件标有以“TarMK GC”开头的“警告”或“错误日志”消息。 另请参阅下面的根据错误消息进行疑难解答部分。 | |
修订清理运行状况检查中会显示哪些信息? 它们如何以及何时对颜色编码状态级别做出贡献? | 修订版清理运行状况检查是操作功能板的一部分。 如果上次成功执行联机修订版清理维护任务,则状态将为GREEN。 如果“在线修订清理”维护任务被取消一次,则该任务将为YELLOW。 如果“在线修订版清理”维护任务已连续三次取消,则该任务将为RED。 在这种情况下,需要手动 交互,否则在线修订清理可能再次失败。有关更多信息,请阅读下面的疑难解答部分。 另请注意,系统重新启动后将重置“运行状况检查”状态。 因此,新重新启动的实例在修订清理运行状况检查中将显示绿色状态。 利用外部监控工具,可让数据超出AEM正常运行时间。 请参阅将运行状况检查附加到Nagios的AEM文档,作为外部监控工具的示例。 |
|
如何在备用实例上监视自动清理? |
使用 可以使用 请注意,统计信息仅在上次系统启动后才可用。 利用外部监控工具,可让数据超出AEM正常运行时间。 另请参阅有关将运行状况检查附加到Nagios的AEM文档,以作为外部监控工具的示例。 日志文件还可用于检查自动清理的状态、进度和统计信息。 |
|
在备用实例上执行自动清理期间需要监控哪些内容? |
|
如果不运行在线修订清理,最坏的情况是什么? | AEM实例将耗尽磁盘空间,这将导致生产中断。 | |
在发布实例上运行在线修订版清理时,高用户流量是否存在问题? | 高用户流量会影响压缩阶段是否能够成功完成。 |
|
根据运行状况检查和日志条目,联机修订版清理未成功完成一行三次。 要成功完成在线修订清理,需要执行哪些操作? | 您可以采取多个步骤来查找并修复问题:
|
|
开启“运行状况检查”警报后需要执行哪些操作? | 请参阅上一点。 | |
如果在计划维护时段内联机修订版清理已用完时间,会发生什么情况? | 将取消在线修订清理,并删除剩菜。 下次计划维护时间时,它将重新启动。 | |
什么原因导致SegmentNotFoundException 实例记录在error.log 中,如何恢复? |
当TarMK尝试访问它找不到的存储单元(区段)时,会记录
|
如果在在线修订清理过程中发生事件,error.log将是详细的。 下表旨在说明最常见的报文并提供可能的解决方案:
阶段 | 日志消息 | 说明 | 后续步骤 |
---|---|---|---|
估计 | TarMK GC #2:由于压缩暂停,因此跳过了估计 | 当通过配置在系统上禁用压缩时,会跳过估计阶段。 | 启用联机修订版清理。 |
TarMK GC #2:估计中断:${REASON}。 正在跳过压缩。 | 估计阶段提前终止。 可能会中断估计阶段的事件的一些示例:主机系统内存或磁盘空间不足。 | 取决于给定的原因。 | |
压缩 | TarMK GC #2:压缩暂停 | 只要按配置暂停压缩阶段,就不会执行估计阶段或压缩阶段。 | 启用联机修订版清理。 |
TarMK GC #2:压缩已取消:${REASON}。 | 压缩阶段提前终止。 可能会中断压缩阶段的事件的一些示例:主机系统内存或磁盘空间不足。 此外,还可以通过关闭系统或通过管理界面(如操作仪表板中的维护窗口)明确取消压缩来取消压缩。 | 取决于给定的原因。 | |
TarMK GC #2:5次循环后,压实在32.902分钟(1974140毫秒)内失败 | 此消息并不表示存在无法恢复的错误,但只有经过一定的尝试后才终止压缩。 另请阅读下段。 | 请阅读以下Oak文档以及运行在线修订清理部分的最后一个问题。 | |
清理 | TarMK GC #2:清理中断 | 通过关闭存储库已取消清理。 预计不会影响一致性。 此外,磁盘空间很可能不会完全回收。 它将在下一个修订清理周期中回收。 | 调查为何关闭了存储库,并在以后尝试避免在维护时段关闭存储库。 |
需要使用不同版本的Oak-run工具,具体取决于您在AEM安装中使用的Oak版本。 在使用该工具之前,请查看下面的版本要求列表:
对于Oak版本1.0.0至1.0.11或1.1.0至1.1.6,请使用Oak-run版本 1.0.11
对于比上述更新的Oak版本,请使用与AEM安装的Oak核心相匹配的Oak-run版本。
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-interval。压缩当前映射之前要保留的压缩映射条目数。 默认为 1000000。如果有足够的堆内存可用,则应将此值增加到更高的数字,以便提高吞吐量。 此参数已在Oak版本1.6中删除,但无效。
-Dcompytion-progress-log.将记录的压缩节点数。 默认值为150000,这表示在操作期间将记录150000紧的节点。 将此参数与下面介绍的下一个参数结合使用。
-Dtar.PersistCompontationMap。 将此参数设置为true可使用磁盘空间而不是堆内存来保留压缩映射。需要oak-run工具版本1.4及更高版本。 有关更多详细信息,请参阅脱机修订版清理常见问题解答部分中的问题3。 此参数已在Oak版本1.6中删除,但无效。
-force。 强制压缩并忽略不匹配的区段存储版本。
使用--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中删除。 |