远程:致命:内存不足,使用post接收挂钩进行git推送时realloc失败

远程:致命:内存不足,使用post接收挂钩进行git推送时realloc失败,git,Git,当我在与1和1共享的主机上将remotename branchname推送到我的远程主机时,我收到以下错误消息: Counting objects: 7, done. Delta compression using up to 8 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (7/7), 688 bytes | 0 bytes/s, done. Total 7 (delta 2), reused 0

当我在与1和1共享的主机上将remotename branchname
推送到我的远程主机时,我收到以下错误消息:

Counting objects: 7, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 688 bytes | 0 bytes/s, done.
Total 7 (delta 2), reused 0 (delta 0)
remote: fatal: Out of memory, realloc failed
我用以下代码设置了远程git repo的post接收挂钩:

#!/bin/sh
git --work-tree=/absolute/path/to/remotedir --git-dir=/absolute/path/to/remotedir/live.git checkout -f
当我SSH到我的远程设备并发出
free
时,我看到有大量可用内存(不确定这是否与我的问题有关):

我的遥控器正在使用:

Debian 3.14.73-2~ui80+4
git version 2.1.4
OS X 10.11.2
git version 2.4.9 (Apple Git-60)
我的本地计算机正在使用:

Debian 3.14.73-2~ui80+4
git version 2.1.4
OS X 10.11.2
git version 2.4.9 (Apple Git-60)
我真的不知道为什么会这样。感谢您的帮助

编辑 当我在遥控器上运行
ulimit-a
时,我得到:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 1
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 512
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) 1800
max user processes              (-u) 42
virtual memory          (kbytes, -v) 786432
file locks                      (-x) unlimited

根据ulimit,托管服务器已将虚拟内存的每个进程限制设置为768MB。您的后钩子脚本正在消亡,因为它的需求可能已经超过了限制

您可以尝试更新git配置以适应您的环境。这里有一些提示


我设法解决了这个问题。至少,我已经好几个月没买了。由于我做了许多尝试和错误,阅读了许多不同的建议等,我不知道到底是什么配置更改修复了它

因此,我想分享我的git配置,以帮助他人作为参考:

core.preloadindex=false
core.packedgitwindowsize=640m
core.packedgitlimit=640m
pack.windowmemory=640m
pack.threads=1

多亏了@БаЙ。谢谢分享!但是在语法方面,我们遇到了一些问题,但可能适用于他的服务器。对于1和1,我们必须使用此git配置来实现远程回购:

[core]
    packedGitWindowSize = 640m
    packedGitLimit = 640m
    preloadindex = false

[pack]
    windowMemory = 640m
    threads = 1

在1和1主机上,在命令提示下

ulimit-a

报告了几件事。。。一个是:

打开文件(-n)512

ran命令:

ulimit-Sn无限

改为:

打开文件(-n)1024


然后,
git提交
就可以工作了。不再出错。

从错误消息中,它指向远程主机上的git进程似乎达到内存限制。在用户运行post钩子时,检查该用户“ulimit-a”(或)的限制(如果用户对内存限制有任何限制)。我还会检查“dmesg”或/var/log/messagesoutput@VenkatC请看我文章中的编辑。内存限制是否足够?非常感谢。此外,dmesg中没有任何内容,也没有/var/log/messages文件。虚拟内存(kbytes,-v)786432==>看起来用户虚拟内存的限制设置为768MB。检查/etc/security/limits.conf,如果在那里设置了任何限制,您可能希望根据git项目/post钩子脚本工作所需的内存量来增加这些限制。如果“ulimit-vh”显示为unlimited,那么您的shell配置文件/登录脚本中可能会有一些限制。您可以使用“ulimit-Sv unlimited”将限制临时设置为无限。是的,谢谢您这么做。我更新了配置以扩展内存限制。@hot\u barbara我在1和1共享主机上有完全相同的问题。你是如何更新你的配置来解决这个问题的?我记不起来了,不管我做了什么,都没有解决它。我打电话1和1他们说,因为他们认为这是一个软件问题与Git他们不支持它。如果你有解决办法,请告诉我们@ЕлинЙ. 您有1和1的解决方案吗???@SimonFranzen请查看我刚才发布的答案。
preload index=false
在从存储库中删除大文件后对我来说已经足够了