You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Nexus下载大文件时连接被主机软件中止问题求助

解决Windows Server 2008 R2实例上Java进程从Nexus下载大文件中断的问题

从你的描述和Nexus日志来看,核心问题是Windows主机主动中止了Socket连接,结合大文件下载场景,大概率是系统TCP/IP栈限制、Java进程网络配置不足,或者AWS实例的网络特性导致的。下面给你几个针对性的解决方案,按优先级排序:


1. 先用命令行工具验证下载是否正常(快速排查)

首先排除Java进程本身的问题,用支持断点续传的命令行工具测试下载:

  • 用wget(若未安装可先部署):
    wget -c http://your-nexus-url/path/to/2.6GB-artifact.zip
    
  • 或者用PowerShell的Invoke-WebRequest:
    Invoke-WebRequest -Uri "http://your-nexus-url/path/to/2.6GB-artifact.zip" -OutFile "local-artifact.zip" -Resume
    

如果命令行能完整下载,那问题肯定出在Java进程的配置上;如果还是中断,就聚焦到系统或AWS网络层面。

2. 调整Java进程的网络配置(针对Java端问题)

Java默认的网络超时和缓冲区设置可能不足以支撑大文件长时间下载,给你的Java进程添加以下JVM参数:

-Dsun.net.client.defaultReadTimeout=3600000  # 设置读超时为1小时(单位:毫秒)
-Dsun.net.client.defaultConnectTimeout=300000  # 设置连接超时为5分钟
-Djava.net.preferIPv4Stack=true  # 强制使用IPv4,避免IPv6兼容性问题
-Dsun.net.inetaddr.ttl=300  # 缩短DNS缓存时间,避免解析异常

如果你的Java代码是自定义下载逻辑,一定要实现断点续传:

  • 用HttpURLConnection时,先检查本地已下载文件大小,再设置请求头:
    long downloadedSize = new File("local-artifact.zip").length();
    connection.setRequestProperty("Range", "bytes=" + downloadedSize + "-");
    

这样即使连接中断,下次可以从断点继续下载,不会丢失已下载内容。

3. 修正Windows Server 2008 R2的TCP/IP栈设置(针对系统层面)

你之前修改注册表无效,可能是没改对项或者未重启生效。请按以下步骤操作:

  1. 打开注册表编辑器(regedit),定位到HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters:
    • 添加/修改TcpTimedWaitDelay(DWORD),设为十进制30(缩短TIME_WAIT端口占用时间)
    • 添加/修改MaxUserPort(DWORD),设为十进制65534(增加可用端口数量)
    • 添加/修改TcpMaxDataRetransmissions(DWORD),设为十进制10(增加TCP重传次数,避免轻易中止连接)
  2. 定位到HKLM\SYSTEM\CurrentControlSet\Services\AFD\Parameters:
    • 添加/修改DefaultReceiveWindow(DWORD),设为十进制131072(增大接收缓冲区,适配大文件传输)
    • 添加/修改DefaultSendWindow(DWORD),设为十进制131072(增大发送缓冲区)
  3. 修改完成后重启服务器,确保设置生效。

4. 检查AWS实例的网络限制(针对云环境)

t2.large是突发性能实例,长时间大流量下载可能触发带宽降速,进而导致连接超时:

  • 临时切换到固定带宽的实例类型(比如m5.large)测试,看是否还会中断;
  • 查看CloudWatch监控指标:检查NetworkIn/NetworkOut的带宽变化,以及PacketLoss是否有异常;
  • 检查安全组的TCP空闲超时:AWS安全组默认TCP空闲超时是360秒(6分钟),如果下载过程中出现短暂停顿,可能被判定为空闲而断开。可以在Java代码中添加心跳包(比如每隔5分钟发送一个空请求头),或者联系AWS支持调整安全组超时;
  • 确认VPC的DNS解析正常:避免下载过程中Nexus域名解析到不同IP导致连接中断。

5. 调整Nexus服务器的配置(如果有权限)

如果能访问Nexus的配置,调整Jetty服务器的连接超时:

  • 打开Nexus安装目录下的etc/jetty/jetty.xml,找到idleTimeout配置,把默认的300000(5分钟)改成3600000(1小时):
    <Set name="idleTimeout">3600000</Set>
    
  • 确保Nexus启用了断点续传支持:检查Nexus返回的响应头是否包含Accept-Ranges: bytes,如果没有,在Nexus配置中开启相关选项。

先从命令行测试开始,一步步排查,应该能找到问题所在。

内容的提问来源于stack exchange,提问作者Saatviga Sudhahar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:51:28