Git 推送失败,错误“内存不足”

jwi*_*ir3 5 git

我在内存不足的服务器上使用 gitosis,特别是大约 512 MB。当我尝试推送一个大文件夹(恰好是来自 android 手机的备份)时,我得到:

me@corellia:~/Configs/$ git push origin master

Counting objects: 18, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (14/14), done.
fatal: Out of memory, malloc failed MiB | 685 KiB/s   
error: pack-objects died of signal 13
error: failed to push some refs to 'git@dagobah:Configs'
Run Code Online (Sandbox Code Playgroud)

我一直在寻找的网站,并特别发现:http://www.mail-archive.com/git-users@googlegroups.com/msg01747.html以及HTTP://git.661346.n2.nabble。 com/Out-of-memory-error-during-git-push-td5443705.html但这些似乎对我没有帮助,原因有两个:1)我推送时实际上并没有内存不足。当我在推送期间运行 'top' 时,我得到:

24262 git       18   0 16204 6084 1096 S    2  1.2   0:00.12 git-unpack-obje   
Run Code Online (Sandbox Code Playgroud)

此外,在推送期间,如果我运行 /head/meminfo,我会得到:

MemTotal:       524288 kB
MemFree:        289408 kB
Buffers:             0 kB
Cached:              0 kB
SwapCached:          0 kB
Active:              0 kB
Inactive:            0 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       524288 kB
Run Code Online (Sandbox Code Playgroud)

所以,似乎我有足够的可用内存,但它实际上仍然失败,而且我还没有足够的 git 专家来弄清楚发生了什么。如果有人能帮助我并告诉我可能导致此问题的原因以及我可以做些什么来解决它,我将不胜感激。

谢谢!

编辑:

运行ulimit -a命令的输出:

scottj@dagobah:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 204800
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 204800
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Run Code Online (Sandbox Code Playgroud)

编辑

git 对象和大小是:

313796  .git/objects/88/7ce48679f885af4c466d4ddccef9a9954a9de6
224276  .git/objects/18/261f6a52926a756c7ecb453e025d1f25937026
6248    .git/objects/63/a0b4e622c893d3dcc162052b43301030d0c86d
5608    .git/objects/a2/0c65987656cba591171549752eb97f0207fec8
2608    .git/objects/pack/pack-3be8300f69b67fa8fa687df84bbd9b8c96e86c8e.pack
28  .git/objects/pack/pack-3be8300f69b67fa8fa687df84bbd9b8c96e86c8e.idx
24  .git/objects/c9/8909563ec60369d69ac2d317af25a44c9fc198
24  .git/objects/5d/1f74bd9bc4c575a7eeec08d59916d9829068d1
24  .git/objects/53/edad79cb051f5e7864d9d3339fa59990ccfe2d
8   .git/objects/80/dd50c7a314950e5a1f56c0210b0a91f48ee792
Run Code Online (Sandbox Code Playgroud)

Jas*_*ley 0

您使用什么平台/发行版?Ubuntu、redhat、centos 等...都用于客户端和服务器吗?您推送的客户端上的内存使用情况是多少?我以前曾在包含大量修订的推送中发生过这种情况。我知道一种解决方法是如果可能的话逐步将更改推送到服务器。另一个解决方案是增加内核内存使用量。对于某些内核发行版,存在阻止内核将最大内存分配给单个进程的设置:

Set Kernel Parameters
Modify the "/etc/sysctl.conf" file to include the lines appropriate to your operating system.
# Red Hat Enterprise Linux 3.0 and CentOS 3.x 
 kernel.shmmax = 2147483648
 kernel.shmmni = 4096
 kernel.shmall = 2097152
 kernel.shmmin = 1
 kernel.shmseg = 10

# semaphores: 
 semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128
 fs.file-max = 65536

# Red Hat Enterprise Linux 4.0 and CentOS 4.x 
 kernel.shmmax = 536870912
 kernel.shmmni = 4096
 kernel.shmall = 2097152
Run Code Online (Sandbox Code Playgroud)

如果您的 git 进程超出限制,尽管报告系统上可用的最大内存,内核仍将终止该进程。

注意:请小心这些设置。您可能不想使用该示例中的设置,因为我从我们环境中的服务器中提取了它们。

需要提及的一些额外注意事项:

To Update and test kernel settings with sysctl, use following commands:

List current settings: sysctl -A|grep shm

sysctl -w kernel.shmmax=<value> to write in sysctl.conf
sysctl -p /etc/sysctl.conf to read/reload the values from sysctl.conf

Disable secure linux by editing the "/etc/selinux/config" file, making sure the SELINUX flag is set as follows.

SELINUX=disabled
Run Code Online (Sandbox Code Playgroud)