artifactory - 从 Jfrog 工件中删除工件不会释放磁盘空间
问题描述
我有 Artifactory Jfrog 6.16.0 Pro。我安装了插件 artifactCleanup 并针对存储库运行它。它删除了大约 500GB。下一步,我从垃圾箱中删除文件,现在它为零。最后一个我手动运行“垃圾收集”。
空间没有被释放。在存储部分中,它向我显示了以下信息:
Binaries Size: 1.67 TB
Artifacts Size: 663.15 GB
Optimization: 257.79%
请指教,删除工件后如何释放空间?
谢谢!
解决方案
首先让我们确定 Artifactory GC 是如何工作的。从文档:
部署新文件时,Artifactory 会检查是否存在具有相同校验和的二进制文件,如果存在,则将存储库路径链接到此二进制文件。删除存储库路径后,Artifactory 不会删除二进制文件,因为它可能被其他路径使用。但是,一旦删除了所有指向二进制文件的路径,该文件实际上就不再被使用。为了确保您的系统不会被未使用的二进制文件阻塞,Artifactory 会定期运行“垃圾收集”来识别未使用(“已删除”)的二进制文件并将它们从数据存储中处理掉。默认情况下,它设置为每 4 小时运行一次,并由 cron 表达式控制。
这意味着如果我存储相同的 5GB 文件 100 次,那么我们的工件大小是 500GB,而我们的二进制文件大小仍然是 5GB。这是因为 Artifactory 通过基于校验和的存储进行重复数据删除。
二进制文件大小不应该超过工件大小,恰恰相反,优化不应该通过 100%。然而,这基本上是通过运行“df”命令计算出来的,所以如果 GC 没有运行,它会显示那些二进制文件仍然存在。
这会将我们带到您的问题,这可能不是问题,但之前链接的文档中也提到了预期的行为:
未引用的二进制文件(包括现有的未引用的二进制文件或从垃圾箱中手动删除的工件)将在之前每 20 次 GC 迭代运行一次的 Full GC 策略期间被删除(可配置,'artifactory.gc.skipFullGcBetweenMinorIterations=20')。
这告诉我们,二进制文件的实际删除只会每 20 次迭代发生一次。请尝试手动触发 GC 20 次;完整 GC 的输出将与常规输出不同,为您提供删除内容的摘要。
如果这不起作用,请查看 Artifactory 用户的权限,以确保它可以删除文件。
推荐阅读
- python - Pygame在添加一点代码后突然卡顿了,为什么呢?
- excel - 计算负值并对它们进行排名
- c++ - 向 ApplyGradientDescent 提供可变 alpha(学习率)
- python - 使用随机生成的、人类大小的、唯一的 id 创建模型实例
- python - 将零个或可变数量的值传递给 Click.Option
- jquery - 追加/删除到引导程序的末尾,单击时选择
- c++ - 由于具有循环引用的类中的 unique_ptr 或向量而导致核心转储
- laravel - Laravel - 如何将 MySQL 查询转换为 Laravel Eloquent
- java - 如何使用 Java 中的 ProcessBuilder 将字符串写入 cmd 提示符?
- c# - DropDownList Items.Clear 与绑定到空数据源