远程:致命:内存不足,使用post接收挂钩进行git推送时realloc失败
当我在与1和1共享的主机上将remotename branchname远程:致命:内存不足,使用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
推送到我的远程主机时,我收到以下错误消息:
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
在从存储库中删除大文件后对我来说已经足够了