【故障排查】七牛云上传问题排查

七牛云上传问题排查

在一个商城的应用中遇到了文件上传缓慢的问题,比如上传一个 3M 的图片,居然耗时2分钟。这明显是有问题的,接下来是排查的流程。

排查方向(分服务端、本地客户端、网络、七牛配置等维度)

一、客户端代码问题

  • 有没有使用 InputStream 异常耗时的写法?(比如读取流特别慢、阻塞)
  • 文件是临时生成的吗?(临时文件生成缓慢)
  • 有没有对 fileBytes 做 base64 编码等多余处理?

二、网络问题

📡 服务端到七牛的网络延迟大或者带宽不足?

1
traceroute upload.qiniup.com

三、七牛云配置是否异常(比如 bucket 绑定了较远的存储区域)

Region 设置是否正确?

七牛有多个区域,比如华东、华北、华南、北美。应该设置与服务器物理位置最接近的:

1
Configuration cfg = new Configuration(Region.huabei()); // 华北

四、排查上传过程日志

打开详细日志:

  • 七牛 SDK 支持开启 debug 模式(输出日志)
  • 在服务端记录上传耗时:从接收到文件 → 上传完成 的整体耗时
1
2
3
4
long start = System.currentTimeMillis();
// 上传逻辑
long end = System.currentTimeMillis();
System.out.println("上传耗时: " + (end - start) + "ms");

修复代码

  1. 使用 byte[] 上传
  2. 配置相近的上传区域

以上改动都没有优化上传速度,怀疑是网络出问题了

排查网络问题

通过 ping 等工具发现延迟和丢包情况是非常健康的,紧接着使用iperf3测试带宽

A 服务器运行

1
iperf3 -s

B 服务器运行

1
iperf3 -c <server-ip> -R   # 测试上传带宽

发现上行速度确实很慢

为了更进一步的确认 又使用 nload 查看具体网卡的实时上传速率

发现在上传文件的时候 对应网卡的上传速度只有 几十 kBit/s

那么就确定是带宽不足的问题了

解决问题

  1. 确认是不是 docker 限制了速率

    1
    docker inspect file-prod | grep -i bandwidth
  2. 确认是不是云服务器的上行带宽有限制

最终我们找到了影响上传速度的问题,并成功解决。