【问题标题】:Git clone fails with out of memory error - "fatal: out of memory, malloc failed (tried to allocate 905574791 bytes) / fatal: index-pack failed"Git 克隆因内存不足错误而失败 - “致命:内存不足,malloc 失败(尝试分配 905574791 字节)/致命:索引包失败”
【发布时间】:2011-11-28 07:24:15
【问题描述】:

我正在尝试将大型 (1.4GB) Git 存储库克隆到具有 384MB RAM 的 32 位 Debian VM。我正在使用 Git 1.7.2.5,并使用 SSH 协议进行克隆 ('git clone user@host.com:/my/repo')

克隆失败并显示以下消息:

remote: Counting objects: 18797, done.
remote: warning: subobtimal pack - out of memory
remote: Compressing objects: 100% (10363/10363), done.
fatal: out of memory, malloc failed (tried to allocate 905574791 bytes)
fatal: index-pack failed

我尝试减少 Git 用于在主机存储库端重新打包的内存量,并重新打包:

git config pack.windowMemory 10m
git config pack.packSizeLimit 20m
git repack -a -d

我的问题如下:

  1. 这是一个客户端大小(克隆端)的问题,还是应该在我从中克隆的存储库中解决?
  2. 在这两种情况下,我能做些什么来使克隆成功吗?网上很多潜在的解决方案都涉及以下部分/全部内容,在这种情况下都不可接受:

    • 实质上更改存储库的内容(即删除大文件)
    • 为正在执行克隆的 VM 提供更多 RAM
    • 为正在执行克隆的 VM 提供 64 位虚拟 CPU
    • 带外传输(例如使用 Rsync 或 SFTP 传输 .git 目录)

提前致谢。

【问题讨论】:

  • 您是否检查过您有足够的磁盘空间(在克隆机器上)来容纳整个包文件(900 MB 左右)?
  • Romain:是的 - 我在进行克隆的机器上至少有 5.5GB 可用空间。
  • 是的,当我在存储库中使用大型二进制文件时,这让我感到很痛苦。如果这是原因,请查看 git-bup 的替代方法

标签: git memory malloc debian


【解决方案1】:

今天我遇到了同样的问题。 Git服务器内存不足,但gitlab报告仍有可用内存。我们用 htop 检查内存(报告没有可用),重新启动 gitlab,一切恢复正常。

【讨论】:

    【解决方案2】:
    sudo git pull
    

    每次拉取时我都会遇到相同的错误消息,sudo git pull 实际上帮助我克服了这个错误消息并且拉取成功。

    【讨论】:

    • 对我的否决票的快速解释:此答案指示违反最佳实践并执行本质上危险的操作。说真的,人们,不要这样做。
    【解决方案3】:

    我在使用 MSysGit 32 位的 Windows 上遇到了类似的问题。 来自Cygwin 的 git 64 位完成了这项工作。 也许您应该使用 64 位 Debian VM(而不是 32 位)。

    我的original answer 可在问题Git on Windows, “Out of memory - malloc failed” 中找到。

    【讨论】:

    • 对不起,但这对我也不起作用。尝试分配212211077字节失败
    • 您的操作系统是什么? (您使用 WindowsXP 吗?)您的操作系统是 32 位还是 64 位?你是如何安装 Git 的? (下载还是自编译?)你的 Git 是 32 位还是 64 位?干杯;-)
    【解决方案4】:

    git clone 不会查看您的 pack.packSizeLimit 设置,它无论如何都会在一个包中传输所有内容 - 除非它自我上次查看以来发生了变化。

    使用 SCP 或 Rsync 确实可以解决您的问题。删除“无用”的大文件,然后重新打包您尝试克隆的存储库也会有所帮助。

    为 VM 提供更多 RAM 也可能会有所帮助 - 我认为您不需要 64 位地址空间来分配 900MB...您还可以为其提供足够的 SWAP 空间来处理 900MB 包而不是增加内存。

    【讨论】:

    • 您好罗曼,感谢您的回复。我最终为 VM 提供了 768MB 的 RAM,暂时解决了这个问题。不过,Git 似乎确实会在早餐时吃掉内存——根据 Charon 在 #git IRC 频道上的说法,在即将发布的 Git 版本中可能会有一个解决方案,它启用“流式解压缩”,而不是 RAM 内解压缩。
    • @grw:它只在某些情况下吃内存 - 节省带宽 - 操作......这就是 git 变得快速的方式
    • 我同意@sehe 所说的......只有当这是轻松实现最佳性能的唯一方法时,Git 才会占用大量内存。现在它更成熟了,人们正在努力让它在更受限制的环境中表现得更好......
    • @Romain,我希望如此:D 感谢您的建议,伙计们。
    • 尝试添加交换,但没有成功。还是不能克隆。 =/
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2016-12-19
    • 2014-11-23
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2018-09-25
    相关资源
    最近更新 更多