ARTIFACTORY:完整的垃圾收集指南

近红外光谱Shervi
2023-01-22 11:07

介绍

本指南包括对JFrog Artifactory垃圾收集作业如何工作的描述,以及调优建议和常见问题。

关键术语:

1.二进制文件:
二进制文件大小等于文件存储库中二进制文件/文件占用的物理存储量。由于Artifactory的原因,每个二进制文件只存储一次checksum-based存储,即使它有多个副本(工件)。
2.构件:
工件大小等于如果每个工件都作为新文件保存在文件存储库中,而没有基于校验和的存储,则将占用的存储量。

下面是同一个工件(左侧)的示例,它被部署到Artifactory两次,每次部署到不同的存储库。在右侧,我们看到二进制文件只在文件存储库中保存了一次。
用户添加图片

人工垃圾收集器

垃圾收集器的工作是从存储器中清除没有匹配工件的二进制文件,并释放磁盘空间。

用户添加图片垃圾收集过程的示意图

人工垃圾收集器有两种策略:小型垃圾收集(从Artifactory版本6.12.0开始)和完全垃圾收集(从第一天开始)。在这两种策略中,Artifactory都使用数据库查询,通过比较artifacts表和二进制文件表来确定应该从文件存储库中删除哪些二进制文件。

小型垃圾收集

此任务在每次GC执行时运行,并涉及在垃圾桶中搜索以下构件停留时间已经过期。

如果不再存在相应工件的副本,则将从存储中删除二进制文件,以及从节点和二进制数据库表中删除其引用。

如果在另一个路径或存储库中仍然存在该工件的单个副本,则只会删除来自nodes表的引用。Artifactory将在binaries表中保存二进制文件及其相应的条目。

完全垃圾收集

此任务将启动每20垃圾收集运行(可配置,默认:20),并包括小垃圾收集任务,清理的档案索引而且它
优化系统存储

注意:完全垃圾收集作业可能会消耗大量Artifactory及其数据库的系统资源。2022世界杯阿根廷预选赛赛程

自Artifactory版本7.29.8以来,完全垃圾收集使用了批处理清理机制来提高性能。批大小和子迭代的数量是可配置的,有关更多信息,请参阅本指南的调优部分。

好消息:

  1. 如果手工从垃圾桶中批量删除工件,则小型垃圾收集器不会清理二进制文件。您必须等到第20次GC迭代时才触发完整GC。
  2. 要使二进制文件符合垃圾收集的条件,它必须在数据库的二进制表中有一个引用。没有通过Artifactory部署到存储的任何文件都不会被垃圾收集器删除。对于这种情况,您可以使用删除未引用的数据特性。
  3. 如果垃圾桶在人工工厂(管理面板→人工工厂→设置→启用垃圾桶)中被禁用,小垃圾收集器将无法工作。

如何触发垃圾收集

Rest API

方法可以触发垃圾收集Rest API调用。要触发完全垃圾收集,执行Rest API调用20次。

例子:curl -uusername:password -XPOST "http://< artifactory - url >/artifactory/api/system/storage/gc"

用户界面

作为具有管理权限的Artifactory用户登录。导航到管理面板→人工→维护→单击“立即运行”,如下所示。

用户添加图片
核查和监测

为了验证是否执行了小垃圾收集作业,请在artifactory-service.log或console.log日志中搜索以下输出:[jfrt] [INFO] [38dc43ddf24cdacc] [.s.d.b.s s.]BinaryServiceImpl:728] [24cdacc|art- execute -138] -触发垃圾回收
[jfrt] [INFO] [38dc43ddf24cdacc] [. s.s.d.b.s.g。][24cdacc|art-exec-138] -启动垃圾回收策略'TRASH_AND_BINARIES'
[jfrt] [INFO] [38dc43ddf24cdacc] [. s.s.d.b.s.g。]GarbageCollector:68] [24cdacc|art-exec-138] -完成GC策略'TRASH_AND_BINARIES'

为了验证完全垃圾收集作业是否已执行,请在artifactory-service.log或console.log日志中搜索以下输出:[2014-06-03] [jfrt] [INFO] [2b5d4bc1dd3e2430] [s.s.b.s s.][art-exec-2270397] -存储垃圾收集器报告:
二进制数:470,507
总执行时间:49.93秒
删除对象:124个
已删除校验和:123
删除的二进制文件:123
释放的总大小:15.80 GB
当前总大小:18.74 TB

要跟踪垃圾收集执行后的工件和二进制文件大小,请以具有管理员权限的用户身份导航到Artifactory UI中的管理面板→监控→存储状态页面,或者使用REST API调用。

常见问题解答

为什么二进制文件的大小大于工件的大小?

当一个工件被删除时,它的数据库引用将立即被删除,但是二进制文件将保留在文件存储库中,直到下一次GC运行。

二进制文件大小大于工件大小表明GC可能无法正常工作或根本不运行。

当工件大小大于或等于二进制文件大小时,GC将按预期操作。

下面是一个人工存储状态的例子,表明GC不能正常工作或不够快(二进制文件大小大于工件大小):

用户添加图片

有多少二进制文件符合完全垃圾收集的条件,应该释放多少空间?

在Artifactory数据库上运行以下SQL查询:选择计数(b.sha1),
Sum (b.bin_length)为binaries_size_in_bytes
FROM binaries b
不存在的地方
(选择n.node_id
FROM节点n
WHERE n.sha1_actual = b.sha1;

如何调优垃圾收集?

中配置下面列出的每个系统属性JFROG_HOME美元/ artifactory / var / etc / artifactory / artifactory.system。属性文件。

确保重新启动Artifactory以使更改生效。

1.调度垃圾收集

要使用CRON表达式调度垃圾收集,请导航到Administration模块→Artifactory→Maintenance。默认情况下,GC每4小时运行一次,导致每天6次迭代。
用户添加图片

2.调优工作线程的数量

二进制文件清理是多线程的,可以像下面这样配置:

artifactory.gc.numberOfWorkersThreads = 3注意:当使用Microsoft SQL Server时,无论上面的系统属性如何,垃圾收集都是单线程的。

3.小型垃圾收集运行次数(Artifactory 6.12.0及以上版本)

以下属性可用于配置在完全GC运行之间发生的小垃圾收集运行次数:

artifactory.gc.skipFullGcBetweenMinorIterations = 20

4.禁用二进制文件的排序删除(第7.31.10条及以上版本)

默认情况下,Full GC将按降序(从大到小)删除二进制文件,并在数据库中进行排序,这可能会影响DB性能。要禁用排序,请将下面的属性设置为true。

artifactory.gc.skipOrderByFullGc = false

5.配置完整GC批大小和迭代次数(Artifactory 7.29.8及以上版本)

默认情况下,Full Garbage Collection批大小设置为10,000。

artifactory.gc.binariesToDeleteBatchSize = 10000下面的属性控制完整垃圾收集子迭代的数量。artifactory.gc.binariesToDeleteIterationAmount = 20即使有额外的二进制文件需要清理,一旦达到上述值,Garbage Collection也会停止,并显示以下消息来表示这一点。[00:38:27,233Z] [jfrt] [WARN] [a83991fe168767bb] [.s.d.b.s s.]BinaryServiceImpl:681] [art-exe -1072408] -
由于达到最大迭代数,GC正在停止