使用SAS从Azure Storage Blob容器下载大文件失败问题求助
Azure Blob 127GB VHD下载35分钟失败原因及解决方案
故障根因
- SAS令牌有效期不足:多数场景下生成SAS时默认设置的有效期较短,若预留的有效时长仅略高于预估下载时长,叠加客户端与Azure的时钟偏移、网络波动导致下载变慢,会触发SAS过期直接终止任务,是固定35分钟时段失败的最高发原因。
- 中间网络会话超时:企业出口防火墙、代理服务器、ISP默认的TCP长连接超时时间通常为30-45分钟,下载过程中如果短时间内没有有效数据传输,会话会被中间设备强制断开,导致任务失败。
- 本地资源不足:下载大文件时AzCopy、Azure Storage Explorer都会在系统临时目录生成缓存分片,若C盘剩余空间不足文件大小的1.2倍,会出现缓存写入失败终止任务。
- 参数配置不合理:默认的下载块大小过小、并发数过高,容易触发Azure存储侧限流,或者偶发网络抖动时没有足够的重试机制,导致任务中断。
- Windows Server TCP配置缺陷:Windows Server默认的TCP保持存活探测间隔过长,无法维持长连接的会话有效性,易被中间设备判定为空闲连接断开。
可行解决方案
1. 优先调整SAS配置
生成新的SAS令牌时,将过期时间设置为预估下载时长的2倍以上,例如预估下载需要1小时,就设置为3小时有效期,避免时钟偏移和下载延迟导致的过期问题。
2. 使用AzCopy v10优化下载参数
使用以下命令执行下载,适配大文件场景:
azcopy copy "你的Blob SAS访问链接" "C:\Download\target.vhd" --block-size-mb 100 --retry-count 10 --cap-mbps 50 --log-level INFO
参数说明:
--block-size-mb 100:将分片块大小调整为100MB,减少分片数量降低连接开销--retry-count 10:遇到网络错误时最多重试10次--cap-mbps 50:限制下载速度为50MB/s,避免触发Azure存储侧的吞吐量限流,可根据实际带宽调整- 若网络需要走代理,提前执行
set AZCOPY_CONCURRENCY_VALUE=16降低并发数,避免占满带宽导致会话中断。
3. 调整TCP长连接配置
以管理员身份打开cmd执行以下命令,开启TCP保持存活探测,避免会话被中间设备断开:
netsh int tcp set global timestamps=enabled netsh int tcp set global keepalivetime=300000
执行完成后重启服务器生效,该配置会每5分钟发送一次存活探测包,维持长连接有效性。
4. 本地存储检查
- 确认C盘剩余空间不小于160GB,预留足够的缓存空间
- 确认C盘为NTFS格式,不支持大于4GB文件的FAT32/exFAT格式需要提前转换
- 若使用Azure Storage Explorer下载,将临时缓存目录修改为剩余空间更大的磁盘,避免系统盘空间不足。
5. 网络配置排查
联系网络管理员确认出口防火墙、代理服务器针对Azure存储端点的TCP会话超时时间,调整为2小时以上,避免主动断开长连接。
内容的提问来源于stack exchange,提问作者Majkl
相关产品推荐
相关产品推荐

