树莓派3部署GOGS服务因内存不足导致git clone失败问题问询
服务端配置修正(核心问题解决)
你之前尝试的配置未生效核心原因是:配置要在树莓派上GOGS运行对应的git用户下设置,而非客户端或者树莓派的root用户,且参数值需要往更小的范围限制,适配树莓派3的小内存:
- 登录树莓派执行以下命令切换到git用户:
sudo su - git
- 执行以下配置命令:
git config --global pack.windowMemory "64m" git config --global pack.packSizeLimit "64m" git config --global pack.threads "1" git config --global pack.deltaCacheSize "32m" git config --global core.bigFileThreshold "1M"
以上配置会严格限制Git打包时的内存占用上限,单线程运行避免多线程额外抢占内存,关闭多余的差分缓存降低内存开销。
查询仓库最大文件的方法
无需克隆到本地,直接在树莓派服务端进入对应仓库目录即可查询:
- 进入仓库路径:
cd /home/git/gogs-repositories/axelle/prog.git
- 执行命令输出最大的5个文件信息:
git rev-list --objects --all | grep "$(git verify-pack -v objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print $1}')"
查询到最大文件的大小后,把core.bigFileThreshold参数设置为略大于最大文件值即可,这样Git不会对大文件做差分压缩,能大幅降低打包时的内存消耗。
可行绕过方案
如果调整配置后仍然克隆失败,可以用以下方案快速解决:
- Git Bundle打包转移方案:在可以正常克隆该仓库的主机上执行以下命令:
git clone git@192.168.0.62:axelle/prog.git cd prog git bundle create ../prog.bundle --all
将生成的prog.bundle文件传输到需要克隆仓库的客户端,执行以下命令恢复:
git clone prog.bundle prog cd prog git remote set-url origin git@192.168.0.62:axelle/prog.git
后续的pull、push操作完全不受影响,和正常克隆的仓库使用逻辑一致。
- 临时增加交换分区应急:树莓派默认交换分区很小,可临时开启2G交换分区缓解内存压力,完成克隆后可随时删除:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
克隆完成后不需要可执行命令删除:sudo swapoff /swapfile && rm /swapfile
服务端问题定位方法
触发克隆操作时,在树莓派上另开一个终端执行free -h实时监控内存占用,同时执行sudo dmesg | grep -i oom,如果有输出内容即可确认是系统触发了内存不足回收机制,杀掉了Git打包进程,实锤故障根因为内存不足。
内容的提问来源于stack exchange,提问作者user369353
相关产品推荐
相关产品推荐

