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中移除。