GIT:致命错误:内存不足,malloc 失败(尝试分配 889192448 字节)

27

当我将我的项目推送到TFS Git时,出现了以下错误:

致命错误:内存不足,malloc失败(尝试分配889192448字节)

9个回答

24

我通过减少postbuffer的大小来解决了这个问题:

[http]
    postbuffer = 5m

1
这个文件在哪里,它的位置在哪里? - Spencer Hill
1
.git/config 或者 ~/.gitconfig - David Pascoe-Deslauriers

21

在Unix上编辑.git/config或Windows上的.gitconfig并修改以下参数。通过运行git config --list --show-origin命令,您可以找到您的git配置文件。

[core]
  packedGitLimit = 128m
  packedGitWindowSize = 128m

[pack]
  deltaCacheSize = 128m
  packSizeLimit = 128m
  windowMemory = 128m

[http]
  postbuffer = 5m

如果您正在通过CLI使用git,请确保在更改此设置后重新启动您的shell/terminal。


1
找不到windowMemory,我使用了您在评论中提到的内容,并将数字增加到900m,但仍然出现相同的错误。 - Joe Sleiman
你是在尝试推送一个归档/压缩文件吗? - lin
你的意思是什么?我的做法是推送我的提交(我不知道他为什么说了那么多兆字节890)。 - Joe Sleiman
小伙子,这个 git 配置文件的路径在哪里? - code-8
1
对我有用,谢谢!在更改设置后,不要忘记关闭您的 shell 并重新启动它。有问题的文件是 ~/.gitconfig - Andreas von Studnitz
显示剩余2条评论

5

因此,它基本上需要 889192448 字节(约为 889MB)的可用内存。

  • 当您的 RAM 空间不足时,会出现此错误。
  • 为 Git 设置的内存限制不符合要求。

要检查基于 Linux 的系统上的可用内存,请执行以下操作。

free -h

如果可用内存大于所需内存,则无需执行任何操作,否则需要添加交换内存来增加 RAM 上的可用空间。
如果 RAM 的可用内存已经足够满足所需内存,则需要配置 git 来利用这个。您可以通过以下命令完成此操作:
git config pack.packSizeLimit 1g
git config pack.deltaCacheSize 1g
git config pack.windowMemory 1g
git config core.packedGitLimit 1g
git config core.packedGitWindowSize 1g

希望这能帮到您。

3

我通过关闭大量占用内存的应用程序(例如Visual Studio和SQL Server),并重新推送来解决了此问题。


2

我解决了这个问题,通过给我的服务器添加内存。原先只有512MB的内存,我将其扩展到了2GB。


1
我遇到了这样一种情况,Git服务器(Gitlab)试图向我发送repo,但由于服务器内存不足而失败。我重新启动并增加了更多的内存,问题得到解决。在这里提及它,以防有人特别搜索Gitlab,就像我一样。 - CoderGuy123

1

我在Windows上遇到了同样的问题,只是换了一个分支。最终,我无法拉取或获取我的项目,因为出现了内存错误("尝试分配..."等)。我使用增加git pack和核心限制的技巧,但这对我没有用。最终,我从电脑中删除了git并重新安装。问题得到解决。


1
根据我的经验,这种情况可能是由于以下原因之一造成的:
  1. 最常见的情况是有一个或多个文件太大,Git 无法处理。在我看来,这通常是 .sql、.zip、.gz 或媒体文件。但仅仅将它们从存储库中删除并不能解决问题,因为它们在实际的 Git 历史记录中(在你本地机器和/或你正在拉取的远程服务器上的 .git 文件夹内)。我还没有找到完全从所有 Git 历史记录中删除它的方法,所以我通常会创建一个新的存储库,在其中创建一个 .gitignore 文件,然后将我的文件复制到那里。虽然不是一个好的解决方案,但这是我能找到的最好的解决方案,直到我能找到一种完全从所有历史记录中删除它的方法。
  2. 当服务器的 RAM / 内存较低时,也可能出现此问题。(如果你不知道如何增加 RAM,则可能不应该使用 Git,并应该聘请专业开发人员协助你。)
我不是说这些是唯一的可能性。但是在我至少使用了几百个存储库的经验中,每次都是这两个问题之一。通常是第一种情况。
要查看存储库中最大的文件,请执行此命令:ls -lS

0

我在使用1G RAM的Ubuntu时遇到了同样的问题,后来我增加了一些交换空间(多了1G)。现在它可以正常工作了。


-1
经过长时间的搜索和未能找到解决方案,我感到非常沮丧,于是我将“999999999”分配给了postbuffer,结果奇迹般地解决了问题。 ;)
[http]
    postbuffer = 9999999999

你可以试试这个,也许对你有用。祝你好运。:)


1
尝试将末尾的9去掉再试一次? - Umesh Patil
谢谢这个解决方案。这真的救了我的一天。再次感谢。 - fagbemi ayodele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接