ARTIFACTORY:完整的垃圾收集指南
简介
本指南包括JFrog Artifactory垃圾收集工作如何工作的描述,以及调优建议和常见问题。
关键术语:
下面是一个相同工件的示例(左侧),它被部署到Artifactory两次,每次部署到不同的存储库。在右边,我们看到二进制文件在文件存储中只保存了一次。
Artifactory垃圾收集器
垃圾收集器的任务是从存储中清除没有匹配工件的二进制文件并释放磁盘空间。
Artifactory垃圾收集器有两个策略:小型垃圾收集(从Artifactory版本6.12.0开始)和完全垃圾收集(从第一天开始)。在这两种策略中,Artifactory都使用一个数据库查询,通过比较工件表和二进制表来确定应该从文件存储中删除哪些二进制文件。
小型垃圾收集
此任务在每次GC执行时运行,并涉及在垃圾桶中搜索工件停留时间已经过期。
如果相应工件的副本不再存在,那么将从存储中删除二进制文件,以及从节点和二进制数据库表中删除它的引用。
如果在另一个路径或存储库中仍然存在该工件的单个副本,则只有来自节点表的引用将被删除。Artifactory将二进制文件及其对应的条目保存在二进制表中。
完全垃圾收集
此任务将每20次垃圾收集运行(可配置,默认为20次)启动一次,包括小型垃圾收集任务,清理档案索引而且它
优化系统存储.
注意:Full Garbage Collection作业可能会消耗大量Artifactory及其数据库的系统资源。2022世界杯阿根廷预选赛赛程
从Artifactory 7.29.8版本开始,完整的垃圾收集使用批量清理机制来提高性能。批处理大小和子迭代的数量是可配置的,有关更多信息,请参阅本指南的调优部分。
值得知道:
- 如果从垃圾桶中批量手动删除工件,小型垃圾收集器将不会清理二进制文件。您必须等到GC的第20次迭代才会触发Full GC。
- 对于符合垃圾收集条件的二进制文件,它必须在数据库的二进制表中有引用。任何没有通过Artifactory部署到存储中的文件都不会被垃圾收集器删除。对于这种情况,您可以使用修剪未引用的数据特性。
- 如果在Artifactory中禁用垃圾桶(管理面板→Artifactory→设置→“启用垃圾桶”),小型垃圾收集器将无法工作。
如何触发垃圾回收
Rest API
方法可以触发垃圾收集Rest API调用。要触发完整的垃圾回收,执行Rest API调用20次。
例子:curl -uusername:password -XPOST "http://< artifactory - url >/artifactory/api/system/storage/gc"
用户界面
以具有管理权限的Artifactory用户登录。导航到管理面板→Artifactory→维护→点击“立即运行”,如下图所示。

核实及监察
为了验证小型垃圾收集作业是否被执行,请在artifact -service.log或console.log日志中搜索以下输出:2022-11-07T17:09:51.474Z [jfrt] [INFO] [38dc43ddf24cdacc] [.s.d.b.s.。BinaryServiceImpl:728] [24cdacc|art-exec-138] -触发垃圾回收
2022-11-07T17:09:51.475Z [jfrt] [INFO] [38dc43ddf24cdacc] [.s.d.b.s.g.][24cdacc|art-exec-138] -启动垃圾收集策略'TRASH_AND_BINARIES'
2022-11-07T17:09:51.476Z [jfrt] [INFO] [38dc43ddf24cdacc] [.s.d.b.s.g.][24cdacc|art-exec-138] -完成垃圾收集策略'TRASH_AND_BINARIES'
为了验证完全垃圾收集作业已经执行,在artifact -service.log或console.log日志中搜索以下输出:2021-06-03T19:00:52.167Z [jfrt] [INFO] [2b5d4bc1dd3e2430] [.s.b.s.。GarbageCollectorInfo:96] [art-exec-2270397] -存储垃圾收集器报告:
二进制数:470,507
总执行时间:49.93秒
候选删除:124个
校验和被删除:123
删除的二进制文件:123
释放的总大小:15.80 GB
目前总容量为18.74 TB
要在垃圾收集执行后跟踪工件和二进制文件的大小,请以具有管理权限的用户或使用REST API调用。
常见问题解答
为什么二进制的大小大于工件的大小?
当一个工件被删除时,它的数据库引用将立即被删除,但是二进制文件将保留在文件存储中,直到下一次GC运行。
Binaries Size大于Artifacts Size表示GC可能无法正常工作或根本不运行。
当工件大小大于或等于二进制文件大小时,GC将按预期操作。
下面是一个工件存储状态的例子,它表明GC工作不正常或不够快(Binaries Size大于工件大小):
有多少二进制文件符合完全垃圾回收的条件,应该释放多少空间?
在Artifactory数据库上执行如下SQL查询:选择计数(b.sha1),
Sum (b.bin_length)作为binaries_size_in_bytes
FROM binaries b
不存在的地方
(选择n.node_id
从节点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.禁用二进制文件的排序删除(Artifactory 7.31.10及以上)
artifactory.gc.skipOrderByFullGc = false
5.配置完整GC批处理大小和迭代次数(Artifactory 7.29.8及以上版本)
artifactory.gc.binariesToDeleteBatchSize = 10000下面的属性控制完整垃圾收集子迭代的数量。artifactory.gc.binariesToDeleteIterationAmount = 20即使有额外的二进制文件需要清理,一旦达到上述值,垃圾收集将停止,并将显示以下消息来说明这一点。2022-08-01 00:38:27、233z [jfrt] [WARN] [a83991fe168767bb] [.s.d.b.s.]BinaryServiceImpl:681] [art- execl -1072408] -
GC由于达到最大迭代而停止
