我的团队正在使用 JFrog Artifactory 2.6.7.1 Pro。我们计划升级到 3.x,但由于非技术原因,它们的速度变慢了。
同时,我们的 2.6.x 安装占用了超过 190GB 的磁盘空间。其中大部分空间位于 repo/data/filestore 中。
我已经运行以下维护选项并释放了一些磁盘:
- 删除缓存
- 已删除版本
- 运行存储垃圾收集(这是最有效的,恢复了整个 2GB)
- 压缩数据库
- 删除未使用的数据
- 运行未使用的工件缓存清理
我专门检查了可以有快照的存储库的“要保留的快照”设置。对于这些存储库,它被设置为合理的值(小于 10)。
我应该检查哪些设置来释放一些磁盘空间?
答案1
您提到的某些操作(清除缓存、删除未使用的数据等)是一次性操作,可能会产生一些暂时效果,但我不确定它们在正常操作基础上有多大用处。毕竟,缓存的存在是有原因的。
其他功能,例如 GC,由 Artifactory 默认运行(例如 GC 每 4 小时运行一次)。
所有存储管理详细信息均列于一处Artifactory 用户指南页面。
实际上,有 5 个配置选项可以帮助您控制存储大小例行地:
- 设置快照清理策略。
- 删除未使用的缓存工件。
- 使用 Jenkins Artifactory 插件删除旧版本。
- 编写一个使用 REST API 清理调用的脚本。
- 编写一个用户插件,实现适合您情况的任何正确的清理逻辑。这里有些例子帮助您入门。
答案2
- 您需要从另一台服务器移动artifactory 服务器的备份,这样可以为您提供更多空间。
- 使用 AQL 来管理清理问题。
首先,让我们找到旧的工件,即一年多以前创建的工件(假设今天是 2015 年 5 月 18 日)。使用 AQL 可以轻松完成这个:
items.find({"type":"file", "created":{"$lt":"2014-05-18T"}})
请注意我们如何将“$lt”等比较运算符与日期结合使用,以及我们如何利用 AQL 内置的默认功能,即使用“$and”将多个条件组合在一起。
想要删除过去 6 个月内未下载过的内容:因此,让我们在查询中添加另一个条件,这次使用“stat”域中的“downloaded”字段:
items.find({"type":"file", "created":{"$lt":"2014-05-18T"}, "stat.downloaded":{"$lt":"2014-11-18T"}})
如果你想确保没有删除任何重要内容,那么他将跳过“发布”存储库。
items.find({"type":"file", "created":{"$lt":"2014-05-18T"}, "stat.downloaded":{"$lt":"2014-11-18T"}, "repo":{"$nmatch":"*release*"}})
在这里,我们添加了一个标准,即存储库名称不包含模式“发布“。请注意,如果您有任何存储库名称中带有“release” - 但它不是发布存储库......它也将被跳过,您可能需要重新考虑您的命名约定。
大于 1000 字节的“大型”工件。
因此,这是最终的 AQL 查询,它可以查找系统中满足所有这些条件的所有工件:
items.find({"type":"file", "created":{"$lt":"2014-05-18T"}, "stat.downloaded":{"$lt":"2014-11-18T"}, "repo":{"$nmatch":"*release*"}, "size":{"$gt":"1000"}})