Artifactory 4.12.2下载构件速度过慢问题求助
Maven构建时从Artifactory下载构件速度极慢的排查与优化方案
先明确你的环境背景:
环境详情:
- Artifactory版本:4.12.2
- 服务器操作系统:Ubuntu 16(仅部署Artifactory,无其他服务)
- 网络拓扑:本地主机与Artifactory服务器直连,无代理
- 本地构建环境:Maven 3.3.9、Java 1.8
你遇到的问题是:执行mvn clean install时构件下载速率极低(例如Downloaded: http://IP:PORT/XXXX (235 KB at 0.3 KB/sec)),导致构建耗时过长。你的Maven settings.xml配置如下:
<properties> <deploy.snapshot.id>repo</deploy.snapshot.id> <deploy.snapshot.url>http://IP:PORT/artifactory/libs-snapshot-local</deploy.snapshot.url> <deploy.release.id>repo</deploy.release.id> <deploy.release.url>http://IP:PORT/artifactory/libs-release-local</deploy.release.url> </properties> <repositories> <repository> <snapshots> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </snapshots> <id>central</id> <name>libs-release</name> <url>http://IP:PORT/artifactory/libs-release</url> </repository> <repository> <snapshots /> <id>snapshots</id> <name>libs-snapshot</name> <url>http://IP:PORT/artifactory/libs-snapshot</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <snapshots> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </snapshots> <id>central</id> <name>plugins-release</name> <url>http://IP:PORT/artifactory/plugins-release</url> </pluginRepository> <pluginRepository> <snapshots /> <id>snapshots</id> <name>plugins-snapshot</name> <url>http://IP:PORT/artifactory/plugins-snapshot</url> </pluginRepository> </pluginRepositories> <id>artifactory</id> </profile> </profiles> <activeProfiles> <activeProfile>artifactory</activeProfile> </activeProfiles> </settings>
接下来按优先级给你排查和解决思路:
1. 先排除底层网络问题
这是最基础的排查步骤,先确认是不是网络本身的问题:
- 在本地主机用
wget或curl直接下载同一个慢速率的构件,比如:wget http://IP:PORT/artifactory/libs-release/com/example/your-artifact/1.0.0/your-artifact-1.0.0.jar- 如果这个命令的下载速度也慢,说明问题出在网络链路(比如网线故障、服务器网卡配置、交换机端口限制),可以:
- 检查Artifactory服务器的网络状态,用
netstat -tulpn看端口监听是否正常,iostat看网络IO负载; - 更换直连的网线或端口测试;
- 在服务器上用
iperf测试与本地主机的带宽,确认是否能达到正常的传输速率。
- 检查Artifactory服务器的网络状态,用
- 如果
wget/curl速度正常,那问题就出在Maven或JVM的网络配置上。
- 如果这个命令的下载速度也慢,说明问题出在网络链路(比如网线故障、服务器网卡配置、交换机端口限制),可以:
2. 优化Maven的网络传输配置
Maven默认的HttpURLConnection在某些场景下性能不佳,可以尝试以下调整:
2.1 启用Apache HttpClient作为传输器
Maven 3.x支持替换默认的传输组件,改用更高效的Apache HttpClient。可以在你的项目pom.xml或者全局settings.xml中添加如下配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-wagon-plugin</artifactId> <version>3.5.4</version> <dependencies> <dependency> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-http</artifactId> <version>3.5.4</version> <exclusions> <exclusion> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-http-shared</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-http-shared</artifactId> <version>3.5.4</version> <exclusions> <exclusion> <groupId>org.eclipse.jetty</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.14</version> </dependency> </dependencies> </plugin> </plugins> </build>
2.2 调整JVM网络参数
有时候JVM默认优先使用IPv6会导致解析延迟,强制使用IPv4可以缓解:
- 编辑Maven的启动脚本(比如
/usr/bin/mvn),在MAVEN_OPTS中添加:export MAVEN_OPTS="$MAVEN_OPTS -Djava.net.preferIPv4Stack=true" - 或者在执行Maven命令时临时添加:
mvn clean install -Djava.net.preferIPv4Stack=true
2.3 检查本地仓库缓存
如果本地仓库的构件缓存损坏,Maven可能会反复重新下载。可以:
- 删除本地仓库中对应慢下载构件的目录(默认路径是
~/.m2/repository/[构件包路径]); - 执行
mvn clean install -U强制更新快照和依赖,重新下载构件。
3. 检查Artifactory服务器端配置
服务器端的限制也可能导致下载缓慢:
- 速率限制检查:登录Artifactory后台,进入
Admin > Security > General Settings,查看是否开启了针对匿名用户或特定用户的下载速率限制,如果有,调整为合适的值或暂时关闭测试; - 仓库存储检查:确认Artifactory的仓库存储目录是否在慢速磁盘(比如机械硬盘),可以用
df -h查看磁盘挂载情况,iostat检查磁盘IO使用率; - 日志排查:查看Artifactory的日志文件(默认路径
$ARTIFACTORY_HOME/logs/artifactory.log),搜索下载请求相关的日志,看是否有连接超时、线程池不足、IO异常等信息。
4. 优化settings.xml配置
你的settings.xml里有几个可以微调的点:
- 给
<snapshots>标签添加<updatePolicy>always</updatePolicy>(如果需要实时获取最新快照)或者保留daily,但确保不会频繁触发不必要的检查; - 添加
<servers>配置,即使是匿名访问,也可以明确配置对应的仓库ID,避免Maven反复尝试认证:<servers> <server> <id>central</id> </server> <server> <id>snapshots</id> </server> </servers>
内容的提问来源于stack exchange,提问作者zaq wsx
相关产品推荐
相关产品推荐

