热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Git使用小坑Outofmemory错误的解决方法

这篇文章主要介绍了Git使用小坑Outofmemory错误的解决方法,需要的朋友可以参考下

最近公司将内部使用的代码由svn迁到了git上,所以也必须学者使用Git命令。


虽说git的模式和svn区别很大,但想必也不是什么难事。但没曾想在第一步git clone的时候就踩到了一个大坑……废话不多提,先看错误代码:

代码如下:

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)

就这几行错误码,生生的把我给绊住了一天……

0x00 调内存

看到“Out of memory, malloc failed”,第一反应是内存不足。毕竟虚拟机内存太小,Debian的虚拟机只给了512M的内存,再加上自己没事鼓捣着玩,自己装了一堆乱七八糟的程序,free的只有几十兆了。


于是果断把乱七八糟的进程结束掉,服务停掉,没用的东西全关了。最后又把虚拟机的内存调到了1G.

结果——fatal依然……

0x01 调配置

后来又看了下这句——“allocate 1941159936 bytes”——这是1.8G啊……这能有多大内存给他啊……调内存显然不是办法。于是上网搜了一下这个报错,发现都是让调配置的:

代码如下:

git config --global pack.threads 1 git
config --global pack.deltaCacheSize = 128m
git config --global pack.windowMemory 50m

顺便吐槽一句——国内博客全都在抄这个配置……还把Cache抄成了Chase……复制都不会么……


这样一来,应该是可以减小资源的占用,但遗憾的是貌似git根本没拾这茬,依然是义无反顾的申请了1.8个G的空间……

当然,结果——再一次的fatal依然……


另外,我还找了另一个哥们做了个试验,他的虚拟机里就可以正常clone(1G内存,free不到100M),而我手上的两个虚拟机则都无法正常clone(1G内存,free超过800M 和 2G内存,free将近1.3G)。看起来和内存没什么关系了

0x02 调swap

最后终于看到了这篇:http://stackoverflow.com/questions/14038074/git-pull-fatal-out-of-memory-malloc-failed

让我眼前一亮的是这个帖子里贴出的错误代码和我的几乎一模一样,而且在一开始就写明了上面的所谓配置方案都已经试过了,但依然无效——和我遇到的情况完全一样。不过他最后的结果是:

In the end i had to kill old & create new repo.

貌似是没找到什么好的解决方案……

但当我翻到最下面的时候眼前一亮——“To get around this I temporarily created a large swap drive...”。“a large swap”……醍醐灌顶啊……我立马问了下能正常clone的那个哥们的虚拟机给了多少swap空间,得到的答复是2G,而我手里的——1G和0……和0……和……0……0……0……

原来我需要的是一个大的swap!

虽然我的swap已经是划分好了的,但还是可以添加的,具体方法这篇帖子中也给出了链接:http://www.thegeekstuff.com/2010/08/how-to-add-swap-space/

使用Method2,完美解决。

Method 2: Use a File for Additional Swap Space
If you don't have any additional disks, you can create a file somewhere on your filesystem, and use that file for swap space.

The following dd command example creates a swap file with the name “myswapfile” under /root directory with a size of 1024MB (1GB).

代码如下:

# dd if=/dev/zero of=/root/myswapfile bs=1M count=1024
1024+0 records in
1024+0 records out

# ls -l /root/myswapfile
-rw-r--r--    1 root     root     1073741824 Aug 14 23:47 /root/myswapfile

Change the permission of the swap file so that only root can access it.

代码如下:

# chmod 600 /root/myswapfile

Make this file as a swap file using mkswap command.

代码如下:

# mkswap /root/myswapfile
Setting up swapspace version 1, size = 1073737 kB

Enable the newly created swapfile.

代码如下:

# swapon /root/myswapfile

To make this swap file available as a swap area even after the reboot, add the following line to the /etc/fstab file.

代码如下:

# cat /etc/fstab
/root/myswapfile               swap                    swap    defaults        0 0

Verify whether the newly created swap area is available for your use.

代码如下:

# swapon -s
Filename                        Type            Size    Used    Priority
/dev/sda2                       partition       4192956 0       -1
/root/myswapfile                file            1048568 0       -2

# free -k
             total       used       free     shared    buffers     cached
Mem:       3082356    3022364      59992          0      52056    2646472
-/+ buffers/cache:     323836    2758520
Swap:      5241524          0    5241524

Note: In the output of swapon -s command, the Type column will say “file” if the swap space is created from a swap file.

If you don't want to reboot to verify whether the system takes all the swap space mentioned in the /etc/fstab, you can do the following, which will disable and enable all the swap partition mentioned in the /etc/fstab

代码如下:

# swapoff -a
# swapon -a

说实在的我一直不太关心swap的大小,总觉得没啥用处。这一次就让我长记性了——swap还是必要的!


推荐阅读
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • 本文介绍了软件测试项目的实际操作过程,包括各角色的职责分配、项目启动、测试流程及测试人员的主要任务,旨在为从事软件测试工作的技术人员提供指导。 ... [详细]
  • 持续集成概述与实践指南
    本文探讨了持续集成(CI)的基本概念、目的及其在现代软件开发中的应用。通过实例分析,帮助读者理解如何有效实施持续集成,提高软件开发效率。 ... [详细]
  • Linux环境下配置Subclipse访问SVN+SSH仓库的方法
    本文详细介绍如何在Linux操作系统中配置Subclipse,以便通过SSH协议安全访问SVN仓库。不同于常见的Windows配置指南,本文提供了针对Linux用户的详细步骤。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 本文介绍如何通过更改软件源来提前体验Ubuntu 8.10,包括详细的配置步骤和相关注意事项。 ... [详细]
  • VSCode与Gitee集成:项目提交的高效实践
    本文介绍如何利用VSCode内置的Git工具将项目提交到Gitee,简化Git命令的使用,提升代码管理效率。同时分享一些常见的踩坑经验和解决方案。 ... [详细]
  • 本文详细介绍了如何在Debian系统中正确配置Locale,以确保多语言支持和避免常见的警告信息。 ... [详细]
  • 本文深入探讨了 com.example.android.sunshine.data.TestUtilities 中 validateThenCloseCursor() 方法的使用方法及其代码示例,旨在帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍了Debian及其衍生发行版中如何通过/etc/network/interfaces文件进行网络接口的配置,对比了Red Hat系系统的不同之处,并提供了多种常见配置示例及解析。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 本文提供了在 Kali Linux 2020.01 x64 版本上安装 Docker 的详细步骤,包括环境准备、使用清华大学镜像源、配置 APT 仓库以及安装过程中的常见问题处理。 ... [详细]
author-avatar
重报礼坊官肀网
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有