对存储库的每次更新都会创建新内容修订。 因此,每次更新时,存储库的大小都会增大。 为避免存储库增长失控,需要清理旧的修订以释放磁盘资源。 此维护功能称为修订清理。 自AEM 6.0起,它已作为脱机例程可用。
在AEM 6.3中,引入了名为“在线修订清理”的在线版本。 与AEM实例必须关闭的脱机修订清理相比,在AEM实例处于联机状态时可以运行联机修订清理。 默认情况下,联机修订清除处于打开状态,这是执行修订清除的推荐方式。
注意: 有关介 绍以及如何使用在线修订清除,请参阅视频。
修订版清理过程包括三个阶段:估计、压缩和清理。 估计根据可能收集的垃圾量确定是否运行下一阶段(压缩)。 在压缩阶段,将重写段和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.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
在某些情况下,在尾部和完全压实模式之间交替会延迟清理过程。 更准确地说,在完全压缩后,存储库将扩大(它将多次大小)。 额外空间将在后续的尾部压缩中回收,此时存储库将降低到预完全压缩大小以下。 还应避免并行维护任务执行。
建议磁盘大小至少比最初估计的存储库大小大两三倍。
问题 | 答案 |
升级到AEM 6.4时,我应该注意什么? | TarMK的持久性格式将随AEM 6.4一起更改。这些更改不需要主动迁移步骤。 现有存储库将进行滚动迁移,这对用户是透明的。 迁移过程是在AEM 6.4(或相关工具)首次访问存储库时启动的。 迁移到AEM 6.4持久性格式后,存储库将无法恢复为以前的AEM 6.3持久性格式。 |
问题 | 答案 | |
为什么需要迁移存储库? | 在AEM 6.3中,需要更改存储格式,尤其是为了改进“在线修订清理”的性能和效能。 这些更改不向后兼容,必须使用旧的Oak Segment(AEM 6.2和先前版本)创建的存储库必须进行迁移。 更改存储格式的其他优势:
|
|
是否仍支持以前的Tar格式? | 只有新的Oak Segment Tar受AEM 6.3支持。 | |
内容迁移是否始终是强制的? | 是. 除非您使用新实例进行开始,否则您始终必须迁移内容。 | |
我是否可以升级到6.3并在以后进行迁移(例如,使用其他维护窗口)? | 否,如上所述,内容迁移是强制性的。 | |
迁移时能否避免停机? | 否. 这是一次性工作,无法对正在运行的实例执行。 | |
如果我意外针对错误的存储库格式运行,会出现什么情况? | 如果尝试针对oak-segment-tar存储库运行oak-segment模块(反之亦然),则启动将失败,并显示 IllegalStateException消息“无效的区段格式”。 不会发生数据损坏。 | |
是否需要重新索引搜索索引? | 否. 从Oak-segment迁移到Oak-segment-tar引入了容器格式的更改。 包含的数据不受影响,不会被修改。 | |
如何最好地计算迁移期间和迁移后所需的预期磁盘空间? | 迁移等效于以新格式重新创建区段存储。 这可用于估计迁移过程中需要的额外磁盘空间。 迁移后,可删除旧段存储以回收空间。 | |
如何最好地估计迁移的持续时间? | 如果在迁移之前执行脱机修订清理,则迁移性能可以大大提高。 建议所有客户作为升级过程的先决条件执行它。 通常,迁移的持续时间应类似于脱机修订清理任务的持续时间,假定在迁移之前已执行脱机修订清理任务。 |
问题 | 答案 | |
联机修订清除执行频率如何? | 每日一次. 这是“操作”仪表板中的默认配置。 | |
如何配置在线修订清理维护开始的任务时间? | 请参阅如何运行联机修订清理部分。 | |
联机修订清理是否存在不应超出的最大频率? | 建议按照默认配置每天运行一次联机修订清除。 |
|
哪些关键指标决定了运行在线修订清理的频率? | 无需确定频率,因为“在线修订清理”已配置为维护任务,并且每天自动运行。 | |
为什么首次运行时在线修订清理不会回收任何空间? | 在线修订清理按代代回收旧修订。 每次运行修订清理时,都会生成新生成。 只有至少两代人的内容才会被回收,这意味着在第一轮中,没有什么可回收的。 | |
为什么在脱机修订清除后运行第一个在线修订清除不会回收任何空间? | “脱机修订清理”可以回收除最新一代之外的所有资源,而“联机修订清理”可以回收最新两代资源。 对于新的存储库,在脱机修订清理后首次执行时,联机修订清理不会回收任何空间,因为没有足够旧的空间可回收。 此外,请阅读本章的“脱机修订清理后运行联机修订清理”部分。 |
|
“作者”和“发布”通常具有不同的“在线修订清理”窗口吗? | 这取决于办公时间和客户在线状态的流量模式。 维护窗口应配置在主生产时间之外,以达到最佳清理效果。 对于多个AEM发布实例(TarMK场),联机修订清理的维护窗口应交错。 | |
运行联机修订清理之前是否有任何先决条件? | 联机修订清理仅在AEM 6.3和更高版本中可用。 此外,如果您使用旧版AEM,则需要迁移到新的Oak区段Tar。 |
|
决定在线修订清理持续时间的因素有哪些? | 因素有:
|
|
在“联机修订清理”运行时,作者是否仍可工作? | 是的,联机修订清理可以处理并发写入。 但是,在线修订清理工作可以更快、更高效地进行,而无需并发写入事务。 建议将“在线修订清理”维护计划任务到相对安静的时间,而不占用大量流量。 | |
运行“在线修订清理”时,对磁盘空间和堆内存的最低要求是什么? | 在“在线修订清理”期间持续监视磁盘空间。 如果可用磁盘空间降至关键值以下,将取消该过程。 关键价值是存储库当前磁盘占用量的25%,并且不可配置。 建议磁盘大小至少比最初估计的存储库大小大两三倍。 在清理过程中持续监视空闲堆空间。 如果可用堆空间降至关键值以下,则取消该进程。 关键值通过org.apache.jackrabbit.oak.segment.SegmentNodeStoreService#MEMORY_THRESHOLD配置。 默认值为15%。 Recommendations的最小压缩堆大小调整建议不与AEM内存大小调整建议分开。 一般而言:如果AEM实例的大小足够大,足以应对使用情况及其预期负载,则清除过程将获得足够的内存。 |
|
运行在线修订清理时预期的性能影响是什么? | 联机修订清理是一个后台进程,它同时从存储库读取并写入到常规系统操作。 特别地,它可能需要在短时间内获得对存储库的独占访问权,从而防止其他线程写入存储库。 | |
预计联机修订清理将运行多长时间? | 根据我们内部执行的最新性能测试,执行该测试不得超过2小时。 | |
如果“在线修订清理”需要更长时间,该怎么办? |
|
|
如果联机修订清理超出配置的维护窗口,会出现什么情况? | 确保其他维护任务不会延迟其执行。 如果在同一维护窗口中执行的维护任务比联机修订清除的维护数量多,则可能会出现这种情况。 请注意,维护任务是按顺序执行的,无需配置订单。 | |
为什么跳过修订垃圾收集? | “修订清理”依赖于评估阶段来确定是否有足够的垃圾进行清理。 估计器将上次压缩后的当前大小与存储库的大小进行比较。 如果大小超出配置的增量,将运行清理。 大小增量设置为1 GB。 这实际上意味着,如果自上次清理运行以来存储库大小没有增加1 GB,则将跳过新的修订清理小版本。 以下是估计阶段的相关日志条目:
|
|
如果性能影响过大,是否可以安全地中止自动压缩? | 是. 由于AEM 6.3,它可以通过“操作”仪表板中的“维护”任务窗口或通过JMX安全地停止。 | |
如果AEM实例在计划清理任务关闭,进程是安全中止,还是在压缩完成之前阻止关闭? | 修订清除将被中断,存储库将安全关闭。 | |
在联机修订清理期间系统崩溃时会发生什么情况? | 在这种情况下,不存在数据损坏的风险。 垃圾剩菜将通过后续的运行进行清理。 | |
未运行在线修订清理会产生什么影响? | 性能随时间的推移而下降。 | |
正在收集哪些修订? | 默认情况下,“在线修订清理”只收集至少24小时的修订。 | |
如果并发写入存储库造成过多干扰,会出现什么情况? | 如果系统上存在写入并发,则在线修订清理可能需要独占写入访问才能在压缩周期结束时提交更改。 如oak文档中更详细的说明,系统将进入forceCompact模式。 在强制紧凑期间,获取独占写锁定以便最终提交更改而不会任何并发写入干扰。 要限制对响应时间的影响,可以定义超时值。 默认情况下,此值设置为1分钟,这意味着如果强制压缩在1分钟内未完成,则压缩过程将中止,有利于并发提交。 力紧的持续时间取决于以下因素:
|
|
如何对待机实例执行联机修订清理? |
在冷待机设置中,只需将主实例配置为运行联机修订清除。 在备用实例上,无需专门计划联机修订清理。 待机实例上的相应操作是自动清除——这与在线修订清除的清除阶段相对应。 在主实例上执行联机修订清理后,自动清理在备用实例上运行。 估计阶段和压缩阶段不会在备用实例上运行。 |
|
脱机修订清理是否能够释放比联机修订清理更多的磁盘空间? | 脱机修订清理可以立即删除旧修订,而联机修订清理需要考虑应用程序堆栈仍引用的旧修订。 因此,前者可以比后者更积极地去除垃圾,而后者在少数垃圾收集周期期间会对效果进行摊销。 此外,请阅读本章的“脱机修订清理后运行联机修订清理”部分。 |
|
是否考虑内存映射文件操作? |
|
|
在联机修订清理期间需要监视哪些内容? |
|
|
如何检查联机修订清理是否成功完成? | 您可以通过检查日志来检查联机修订清理是否成功完成。 例如,“ 相应地,会显示一条消息“ |
|
在哪里可以找到上次在线修订清除执行的统计信息? | 状态、进度和统计信息通过JMX( 可以通过 可以使用 请注意,统计信息仅在上次系统开始后可用。 可以利用外部监控工具使数据超出AEM的正常运行时间。 请参阅将运行状况检查附加到Nagios的AEM文档,作为外部监视工具的示例。 |
|
哪些相关日志条目? |
另请参阅下面的基于错误消息的疑难解答部分。 |
|
如何检查在“在线修订清理”完成后回收了多少空间? | 清除周期结束时,日志中会显示一条消息:“TarMK GC #3: cleanup completed ”,包括存储库的大小和回收垃圾的数量。 |
|
在联机修订清除完成后如何检查存储库的完整性? | 联机修订清除后,不需要检查存储库完整性。 但是,您可以执行以下操作,在清除后检查存储库状态: |
|
如何检测联机修订清理是否失败以及要恢复的步骤是什么? | 失败条件由以“TarMK GC”开头的WARN或ERROR日志消息标记。 另请参阅下面的基于错误消息的疑难解答部分。 | |
修订清理运行状况检查中会显示哪些信息? 它们如何以及何时对颜色编码状态级别做出贡献? | 修订版清理运行状况检查是操作仪表板的一部分。 如果上次执行联机修订清理维护任务成功完成,状态将为GREEN。 如果“在线修订清除”维护任务取消一次,则它将为YELLOW。 如果“在线修订清理”维护任务已连续取消三次,则它将为RED。 在这种情况下,需要手动 交互,否则联机修订清理可能再次失败。有关详细信息,请阅读下面的疑难解答部分。 另请注意,系统重新启动后将重置运行状况检查状态。 因此,新重新启动的实例在修订清理运行状况检查上显示绿色状态。 可以利用外部监控工具使数据超出AEM的正常运行时间。 请参阅将运行状况检查附加到Nagios的AEM文档,作为外部监视工具的示例。 |
|
如何监视待机实例的自动清理? |
状态、进度和统计信息通过JMX使用 可以使用 请注意,统计信息仅在上次系统开始后可用。 可以利用外部监控工具使数据超出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:压缩在32.902分钟(1974140毫秒)后失败,经过5个周期 | 此消息并不表示存在不可恢复的错误,但只表示经过一定次数的尝试后,压缩终止。 另请阅读下面的段落。 | 请阅读以下Oak文档和运行在线修订清理部分的最后一个问题。 | |
清理 | TarMK GC #2:清除中断 | 通过关闭存储库已取消清除。 预计不会影响一致性。 此外,磁盘空间很可能不会完全回收。 它将在下一个修订清理周期中回收。 | 调查为什么存储库已关闭,并且今后尝试避免在维护窗口期间关闭存储库。 |
需要使用不同版本的Oak运行工具,具体取决于您在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
橡树运行工具引入了一些功能,旨在提高修订清理过程的性能并尽可能减少维护窗口。
该列表包含若干命令行参数,如下所述:
-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.PersistComponitationMap。 将此参数设置为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中删除。 |