git致命错误:推送分支时内存不足,malloc失败

4

我知道这个问题在StackOverflow上已经被问了很多次,但是我没有找到任何解决我的问题的方法。

我的同事让我负责一个新项目。该应用程序托管在安装有Git的测试Debian服务器上。

首先,我创建了我的分支:

git checkout -b mybranch

我对一些文件进行了小的修改。

当我试图将其推送到 Github(使用我的 Github 账户)时。

git add myfile.php
git commit -m "my first commit"
git push origin mybranch

我收到如下错误信息:
致命错误: 内存不足,malloc 失败
我不理解这是什么意思。我尝试推送的文件总大小为156Ko。此外,整个项目的总大小只有10.9Mo。
我尝试重新启动服务器,但问题依旧存在。
当我在服务器上运行free时,得到以下结果:
             total       used       free     shared    buffers     cached
Mem:        505312     239532     265780          0      51576      71580
-/+ buffers/cache:     116376     388936
Swap:            0          0          0

我同事以前在同一测试服务器上从未遇到过这个问题。

有人可以告诉我这个错误的原因和可能的解决方法吗?
提前感谢。


你可以添加一个交换文件来查看需要多少空间,这可能需要一些时间并使您的服务器无法访问,但如果可以,建议尝试。 - martin
也许来自Linux和Unix的人可以提供更多帮助? - Dariusz
@Dariusz 我会尝试的,谢谢你的建议。 - hg8
@martin 你认为我真的需要那个吗?服务器有265780的空闲内存... - hg8
嗯,这260MB的大小不行,所以你可能需要更多的空间;)。 - martin
这很有道理,但为什么我的同事能够推送? - hg8
3个回答

1

从错误信息来看,我无法确定错误是在本地还是远程方面。

既然你的同事能正常使用,问题可能出现在你的电脑上。也许Git存储库已经损坏。尝试使用git fsck检查它。

你还可以将远程repo克隆一次作为/tmp/test1,然后尝试git push /tmp/test1。如果这样可以工作,那么问题就是出现在远程方面。如果失败,则意味着你的电脑有问题。

在你的电脑上,检查你是否有足够的可用内存,以及单个进程可以请求多少内存。在Linux上,使用ulimit -a进行检查。

[编辑] 此外,free命令的输出表明你只有256MB可用内存(你可以用free -h获取更易读的数字)。这几乎不足以运行大多数程序。Git需要很多内存才能完成它的工作,所以是的,你实际上可能内存不足。


在我的本地电脑上确实可以正常工作,因此问题不在远程。 现在我需要找到如何在测试服务器上解决这个问题。感谢您的回答! - hg8
那个评论没有意义。你说它在本地不起作用,现在又说它很好用。我猜你有一个本地问题,特别是因为你的同事可以推送。你还应该检查一下你的本地存储库有多大。也许你不小心提交了一个巨大的文件。即使你再次删除它,Git 也会记住它曾经存在过及其全部内容。 - Aaron Digulla
不,也许我没有恰当地解释问题。我们直接在测试服务器上工作。当一切正常时,我们会从测试服务器将更改推送到Github。我的同事比我先能够从测试服务器推送。根据您的答复,我所做的是在我的个人电脑上克隆存储库,对文件进行相同的更改,然后将其推送到github。这证实了问题来自于测试服务器而不是Github存储库/分支... - hg8
具体来说,它来自于您在测试服务器上的用户账户。请查看我的编辑。 - Aaron Digulla
确实是内存问题。我从未想过200MB的空闲内存不足以使git正常运行。感谢您的帮助。 - hg8

0

如果您正在配置新服务器,那么解决这个问题的另一个可能性是确保您有一个交换文件。这是我在新的CentOS 6.7上遇到的情况。您可以尝试:

swapon -s

如果没有文件,那么如果您和我一样,这可能是解决方案(创建一个)。对于CentOs,您可以参考https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-swap-adding.html。如果您使用其他发行版,请搜索一下谷歌。


0

这可能是由于存储库中的一些大文件引起的。也许是Zip文件,特别是如果您有一个备份代码/数据库的插件。

要检查这些大文件,请进入存储库的根文件夹并运行:

find . -size +10M -ls

这将显示较大的文件。

此时,您可以:

  1. 通过创建.gitignore并添加这些文件所在的路径来忽略这些文件

或者如果它很重要

  1. 在根目录中创建.gitattributes文件,并使用以下代码(如果所有大文件都是zip文件):*.zip binary -delta

这将确保您将zip文件视为二进制文件-不跟踪其中所做的更改。

如果这样做不起作用,您可能需要访问此处的答案并尝试它们:

Windows上的Git,“内存不足- malloc失败”

祝你好运!


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