ARTIFACTORY:完整的垃圾收集指南
介绍
本指南包括对JFrog Artifactory垃圾收集作业如何工作的描述,以及调优建议和常见问题。
关键术语:
下面是同一个工件(左侧)的示例,它被部署到Artifactory两次,每次部署到不同的存储库。在右侧,我们看到二进制文件只在文件存储库中保存了一次。
人工垃圾收集器
垃圾收集器的工作是从存储器中清除没有匹配工件的二进制文件,并释放磁盘空间。
人工垃圾收集器有两种策略:小型垃圾收集(从Artifactory版本6.12.0开始)和完全垃圾收集(从第一天开始)。在这两种策略中,Artifactory都使用数据库查询,通过比较artifacts表和二进制文件表来确定应该从文件存储库中删除哪些二进制文件。
小型垃圾收集
此任务在每次GC执行时运行,并涉及在垃圾桶中搜索以下构件停留时间已经过期。
如果不再存在相应工件的副本,则将从存储中删除二进制文件,以及从节点和二进制数据库表中删除其引用。
如果在另一个路径或存储库中仍然存在该工件的单个副本,则只会删除来自nodes表的引用。Artifactory将在binaries表中保存二进制文件及其相应的条目。
完全垃圾收集
此任务将启动每20垃圾收集运行(可配置,默认:20),并包括小垃圾收集任务,清理的档案索引而且它
优化系统存储.
注意:完全垃圾收集作业可能会消耗大量Artifactory及其数据库的系统资源。2022世界杯阿根廷预选赛赛程
自Artifactory版本7.29.8以来,完全垃圾收集使用了批处理清理机制来提高性能。批大小和子迭代的数量是可配置的,有关更多信息,请参阅本指南的调优部分。
好消息:
- 如果手工从垃圾桶中批量删除工件,则小型垃圾收集器不会清理二进制文件。您必须等到第20次GC迭代时才触发完整GC。
- 要使二进制文件符合垃圾收集的条件,它必须在数据库的二进制表中有一个引用。没有通过Artifactory部署到存储的任何文件都不会被垃圾收集器删除。对于这种情况,您可以使用删除未引用的数据特性。
- 如果垃圾桶在人工工厂(管理面板→人工工厂→设置→启用垃圾桶)中被禁用,小垃圾收集器将无法工作。
如何触发垃圾收集
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.调度垃圾收集
2.调优工作线程的数量
artifactory.gc.numberOfWorkersThreads = 3注意:当使用Microsoft SQL Server时,无论上面的系统属性如何,垃圾收集都是单线程的。
3.小型垃圾收集运行次数(Artifactory 6.12.0及以上版本)
artifactory.gc.skipFullGcBetweenMinorIterations = 20
4.禁用二进制文件的排序删除(第7.31.10条及以上版本)
artifactory.gc.skipOrderByFullGc = false
5.配置完整GC批大小和迭代次数(Artifactory 7.29.8及以上版本)
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正在停止