Docker部署GitLab CE 13.7.7 HTTPS推送速度过慢 克隆正常问题求助
GitLab Docker部署下HTTPS推送速度异常排查修复
异常特征匹配
- 推送速度稳定在4KiB/s左右,峰值仅54KiB/s,远低于用户20Mbps带宽的正常能力
- 同网络下仓库克隆速度正常,说明基础网络连通性不存在硬故障
- 部署环境为Docker容器运行的
gitlab/gitlab-ce:13.7.7-ce.0,客户端为git version 2.29.0 - 推送时的典型日志输出为:
Writing objects: 17% (22/128), 24.00 KiB | 4.00 KiB/s
核心修复路径
1. 优先解决Docker网络MTU不匹配问题
这类克隆正常、推送极慢的场景,绝大多数是Docker bridge网络MTU和实际链路不匹配导致的。Docker默认bridge网络的MTU值固定为1500,如果宿主机实际网络链路(如云厂商VPC、PPPoE拨号、VPN隧道)的MTU低于1500,会导致上行推送时的大IP包频繁触发分片、丢包重传;而拉取操作因为是服务端主动发流,会自动适配链路MTU,所以克隆速度表现正常。
操作步骤:
- 登录宿主机,执行
ip link show查看当前对外上行网卡的实际MTU值 - 编辑Docker配置文件
/etc/docker/daemon.json,新增和宿主机MTU一致的配置项"mtu": 实际MTU数值 - 重启Docker服务后重建GitLab容器,保证容器内的网络MTU和链路完全匹配
- 验证方式:在GitLab容器内执行
ping -s 包大小 -M do 公网地址,找到不会触发分片的最大包长,反推正确的MTU值 - 配套调整TCP缓冲区参数,通过Docker启动参数传入
--sysctl net.core.wmem_default=262144、--sysctl net.ipv4.tcp_window_scaling=1,保证TCP上行窗口满足传输速率要求
2. 优化GitLab内置Nginx的HTTPS传输参数
13.7版本的GitLab内置Nginx默认配置针对大带宽场景做了裁剪,小带宽场景下会因为缓冲区过小导致频繁的读写等待:
- 进入GitLab容器,编辑配置文件
/etc/gitlab/gitlab.rb,新增如下配置:nginx['client_body_buffer_size'] = 10M:放大客户端上传请求的缓冲区,避免频繁写临时文件nginx['ssl_session_cache'] = 'shared:SSL:10m':复用SSL会话,减少每次推送的SSL握手开销nginx['tcp_nopush'] = 'on'、nginx['tcp_nodelay'] = 'on':开启TCP传输优化,避免小包合并带来的延迟
- 执行
gitlab-ctl reconfigure让配置生效
3. 降低推送链路的冗余IO开销
GitLab 13.7版本在HTTPS推送链路中,默认会在Workhorse层对每个上传的对象做实时的临时缓存落盘,在Docker overlay2存储驱动的磁盘IO性能一般的场景下,会成为上行速度的瓶颈:
- 在
gitlab.rb中调整参数,关闭无意义的缓存冗余:gitlab_workhorse['proxy_headers'] = 'X-Forwarded-For'gitlab_shell['upload_pack_archive_limit'] = 0
- 调整完成后重启GitLab服务,避免在推送链路中触发额外的磁盘读写等待
4. 客户端侧参数验证
在服务端配置调整前,可以先通过客户端参数排除本地干扰:
- 执行
git config --global http.postBuffer 524288000,把默认仅1MB的HTTP推送缓冲区调整为500MB,避免大文件上传时本地频繁分片 - 执行
git config --global http.version HTTP/1.1,排除部分网络环境下HTTP/2流控规则对上行速度的限制 - 调整完成后重新测试推送速度,定位问题是出在客户端还是服务端
内容的提问来源于stack exchange,提问作者user630702
相关产品推荐
相关产品推荐

