如何为大量工件调优Cron Replication
总结
基于cron的复制在本地临时存储文件列表,可能需要进行调整
细节
基于克隆的复制使用源Artifactory和目标Artifactory文件列表中的差异来确定和复制目标Artifactory没有的工件。
Artifactory 6.13.0为基于cron的复制引入了性能改进,但可能需要为基于cron的复制调整新的参数。通过此更改,Artifactory将把目标文件列表保存到Artifactory临时工作目录下的文件系统中,作为一个名为FullTree-{timestamp}.json.gz的文件。它存储在内存中,而列表则以块的形式填充,然后以压缩(gzipped)的方式存储以节省磁盘空间,因此即使文件列表API返回1GB,它也会被保存为100MB或更少。
该文件将在复制完成后或虚拟机关闭(在复制中途关闭的情况下)后删除。
对于存储了大量工件和文件夹的存储库,如果同时运行多个基于cron的复制,可能会占用相当大的存储空间。
决议
您可以在指定变量后运行下面的curl命令来估计磁盘的大小。
curl -L -u$ADMIN_USER "https://$targetArtifactoryUrl/artifactory/api/storage/$TARGET_REPO?list&deep=1& listfolders =1& mdtimestamps =1& statstimestamps =1& inclerootpath =1" -o output.json
约为输出大小的10%(或更少)。除了其他基于Cron的并发复制可能同时创建的内容外,您还可以期望占用临时磁盘空间。此外,您还可以预期,随着输出大小的增加,内存利用率也会增加。Json文件,因为它在压缩保存到磁盘之前暂时存储在内存中。建议将不同的复制分开计时,不要同时运行。为了获得最准确的估计,请选择具有最多数量工件和文件夹的存储库。
根据总输出的大小,您可以通过设置以下参数来自定义Artifactory用于复制的空间大小artifactory.system.properties与所需的尺寸。#默认值为100000000
artifactory.replication.push.fullTree.saveLocally.free.disk.threshold.bytes = 100000000
此外,您可以通过将以下标志设置为false(默认为true)来禁用此功能,以便在流式传输文件列表时恢复复制行为。
artifactory.replication.push.fullTree.saveLocally = true
请参考以下文章进行故障排除:
//www.si-fil.com/knowledge-base/how-to-troubleshoot-common-replication-issues/