使用Maven部署440MB构件至Nexus失败,求排查方案
解决Nexus 2.13上传440MB构件失败(连接重置)的问题
结合你描述的场景——300MB文件上传正常,440MB失败,Nexus GUI能看到文件但日志报连接池超时——这大概率是超时配置不足导致的,而非Nexus本身有硬文件大小限制(Nexus 2.x默认没有全局文件大小限制)。下面分几个方向给你排查和解决的方案:
1. 调整Maven端的上传超时配置
大文件上传需要更长的连接和读写时间,Maven默认的超时阈值可能不足以支撑440MB的传输。你可以在deploy命令中直接添加超时参数:
mvn -e -X deploy:deploy-file -DgroupId=de.test.oca -DartifactId=wildfly-image -Dversion=0.0.1-SNAPSHOT -Dpackaging=tar.gz -Dfile=oca-wildfly-image-0.0.1-snapshot.tar.gz -DrepositoryId=oca-snapshots -Durl=http://xx.xx.xx:8081/nexus/content/repositories/oca-snapshots -Dmaven.wagon.http.connectionTimeout=1800000 -Dmaven.wagon.http.socketTimeout=1800000
或者更持久化的方式,在settings.xml的对应server配置里添加超时:
<server> <id>oca-snapshots</id> <!-- 其他配置比如用户名密码 --> <configuration> <httpConfiguration> <all> <connectionTimeout>1800000</connectionTimeout> <!-- 30分钟,单位毫秒 --> <socketTimeout>1800000</socketTimeout> </all> </httpConfiguration> </configuration> </server>
2. 修改Nexus的Jetty容器超时配置
Nexus 2.x基于Jetty运行,默认的连接空闲超时可能会中断大文件的上传进程。找到Nexus安装目录下的配置文件:
- 编辑
conf/jetty.xml,找到maxIdleTime参数,把默认的300000(5分钟)调整为更大的值,比如1800000:<Set name="maxIdleTime">1800000</Set> - 再编辑
conf/jetty-http.xml,修改idleTimeout参数,同步设置为1800000:<Set name="idleTimeout">1800000</Set>
修改完成后重启Nexus服务,再尝试上传。
3. 检查代理服务器的限制
你已经配置了代理服务器,要确认代理本身是否有上传文件大小或超时限制:
- 如果是Apache代理,检查
LimitRequestBody配置,确保值大于440MB(比如设置为461373440,即440MB对应的字节数); - 如果是Nginx代理,检查
client_max_body_size参数,设置为450M或更大; - 同时确认代理的连接超时配置,避免中途断开连接。
4. 辅助排查点
- 确认Nexus所在服务器的磁盘空间充足,避免因为磁盘满导致文件写入失败;
- 查看Nexus的
nexus.log,如果有文件校验相关的错误,可以适当调大Nexus的后台线程池:在nexus.properties中添加或修改nexus.scheduler.threadPoolSize=10(默认可能是5),提升后台处理效率。
按照这个顺序排查调整,应该能解决440MB构件的上传问题。
内容的提问来源于stack exchange,提问作者user2439278




