git fatal: Out of memory, malloc failed

Git糟心事 Out of memory, malloc failed。 库实在太大了,竟然出现内存分配错误问题。

Cloning into XXXX...
remote: Couting objects: 125627, done.
remote: Compressing objects: 100% (47061/47061), done.
fatal: Out of memory, malloc failed (tried to allocate 1941159936 bytes)

类似这种分配错误有些坑。

处理方法:
1、增加配置,降低内存消耗
2、增加swap,解决没内存可分配。

方法1 -- 修改配置

1、增加配置信息
2、设置大文件属性
3、重建清理

直接执行命令, system、global根据实际替换

git config --system pack.window 1
git config --system pack.threads 1
git config --system pack.deltaCacheSize 128m 
git config --system pack.windowMemory 1024m

git config --system core.repositoryFormatVersion 0
git config --system core.filemode true
git config --system core.bare true

执行完成可以看配置文件内容。

全局配置位置: /etc/gitconfig
库配置位置: abc.git/config

[core]  
        repositoryformatversion = 0  
        filemode = true  
        bare = true  
[pack]  
        window = 0
        threads = 1
        deltaCacheSize = 128m
        windowMemory = 1024m

对大文件设置属性 .gitattributes,如 dpf,jpg等... 。

*.pdf -delta
*.jpg -delta

配置完成有需要重新打包一下,并清理不必要的内容

git repack -adf
git gc --aggressive --prune=now

git repack 参数:
a -- 完整包,关联对象全部打到一个包中,抓取会整包抓取。
d -- 去除冗余
f -- 根据文件属性配置处理文件(delta)

具体看看官网

git repack https://git-scm.com/docs/git-repack
git gc https://git-scm.com/docs/git-gc

方法2 修改 swap

1、增加一个swap文件 1G(1Mx1024)的myswapfile文件
2、修改权限
3、转化为swap格式
4、启用,加入到swap池中

dd if=/dev/zero of=/root/myswapfile bs=1M count=1024
chmod 600 /root/myswapfile
mkswap /root/myswapfile
swapon /root/myswapfile

5、写入配置文件(/etc/fstab),自动引导

# echo "/root/myswapfile swap swap defaults 0 0" >> /etc/fstab
# cat /etc/fstab


/root/myswapfile               swap                    swap    defaults        0 0

相关命令

1、从swap池中拿掉

# swapoff /root/myswapfile

2、查看swap 空间大小,位为k, -m 单位为M

# free -m

3、查看swap 空间(file(s)/partition(s)):

# swapon -s
or
# cat /proc/swaps

GIT-查看config配置信息

git config
// 查看系统config
git config --system --list

// 查看当前用户(global)配置
git config --global  --list

相关Git官方说明 https://git-scm.com/docs/git-config

查看硬盘使用情况

如果要查看磁盘还剩多少空间,当然是用df的命令了。

# df -h

查看目录磁盘占用(d 参数 当前目录下一级)

# du -d 1 -h