如何为大量工件调优Cron复制

约书亚汉
2022-12-27事故发生

总结

基于cron的复制临时将文件列表存储在本地,可能需要进行调优

细节

基于cron的复制使用源Artifactory和目标Artifactory文件列表中的差异来确定和复制目标没有的工件。

Artifactory 6.13.0为基于cro的复制引入了性能改进,但可能需要为基于cro的复制调优新的参数。通过这个更改,Artifactory将把文件列表从目标保存到文件系统,在Artifactory临时工作目录下,作为一个名为FullTree-{timestamp}.json.gz的文件。它存储在内存中,同时以块的形式填充列表,然后存储为压缩(gzip)以节省磁盘空间,因此即使文件列表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%(或更少)。json是您可以期望占用临时磁盘空间的文件,以及其他基于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

请使用以下文章进行故障排除:

//m.si-fil.com/knowledge-base/how-to-troubleshoot-common-replication-issues/