Git使用小坑 Out of memory错误的解决方法

最近公司将内部使用的代码由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还是必要的!

时间: 2015-10-17

linux系统安装git及git常用命令

1 安装GIT 复制代码 代码如下: $  sudo aptitude install git$  sudo aptitude install git-doc git-svn git-email git-gui gitk git软件包包含了大部分Git命令,是必装的软件包,第二行命令也是Git软件包,但是是单独发布的,可以选择安装. 2 下载远程项目的GIT库到本地[code]$  git clone git://远程Git库地址  filename[code] filename 是你本地的文件

Git 详细介绍查看、删除、重命名远程分支和tag

Git 详细介绍查看.删除.重命名远程分支和tag 1. 查看远程 分支加上-a参数可以查看远程分支,远程分支会用红色表示出来: xiaosi@Qunar:~/code/qtown-score$ git branch -a FRESH-1606_qscore-20160503 * dev master remotes/origin/20151225-qtown-score-FRESH-1236 remotes/origin/2016-2qtscore remotes/origin/FRESH-1

Git 教程之查看提交历史详解

Git 查看提交历史 在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看. 针对我们前一章节的操作,使用 git log 命令列出历史提交记录如下: $ git log commit 88afe0e02adcdfea6844bb627de97da21eb10af1 Merge: 14b4dca d7e7346 Author: w3cschool <w3c@w3cschool.cc> Date: Sun Mar 1 15:03:42

git提交空目录的方法

前言 git和 svn不同,仅仅跟踪文件的变动,不跟踪目录.所以,一个空目录,如果里面没有文件,即便 git add 这个目录,另外在别处 check out 的时候,是没有这个空目录的. 只跟踪文件变化,不跟踪目录,这么设计是有原因的.但这会带来一些小麻烦.有时候,确实需要在代码仓库中保留某个空目录.比如测试时需要用到的空目录.下面来看看如何解决. 其实这里有两种情况: 一.目录是空的 这种情况下只需要在目录下创建.gitkeep文件,然后在项目的.gitignore中设置不忽略.gitkee

在 Shell 提示符中显示 Git 分支名称的方法

Git 的好处之一就是把代码的分支管理变成了一件极其便捷的事情,分支只保留差异,不用复制任何文件,不用连接网络,快速创建,用完即删.Git 分支与项目的复杂程度无关,不管你的项目多么复杂,创建 Git 分支永远都是瞬间的事情.同时,因为保留了父类分支的信息,所以分支的合并也变得异常简单. 当在一个项目中频繁使用多个分支时,可以使用 git status 命令查询自己现在正工作在哪个分支下面,不过难免有脑子发昏的时候,忘记自己在哪个分支下面,因而发生误操作之类的杯具. 那么把分支显示在 Shell

Git客户端图文详解 如何安装配置GitHub操作流程攻略

Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来保存工程源代码历史状态的命令行工具; 保存点 : Git的保存点可以追踪源码中的文件, 并能得到某一个时间点上的整个工程项目额状态; 可以在该保存点将多人提交的源码合并, 也可以会退到某一个保存点上; Git离线操作性 :Git可以离线进行代码提交, 因此它称得上是完全的分布式处理, Git所有的操作不需要在线进行; 这意味着Git的速度要比SVN等工具快得多, 因为SVN等工具需要在线时才能操作, 如果网络环境不好, 提交代

Git客户端TortoiseGit(Windows系统)的使用方法

本文环境: 操作系统:Windows XP SP3 Git客户端:TortoiseGit-1.8.8.0-32bit 一.安装Git客户端 全部安装均采用默认! 1. 安装支撑软件 msysgit: https://code.google.com/p/msysgit/downloads/list?q=full+installer+official+git 当前最新版本为v1.9.0. 2. 安装TortoiseGit 首先,要安装Windows Installer 4.5. 然后,安装Torto

GitBook 制作电子书详细教程

gitbook安装: https://nodejs.org/#download 下载node.js源代码(点击绿色的INSTALL), 解压 ./configure make make install 成功执行后,npm就被安装好了. 2. gitbook 安装命令 npm install -g gitbook-cli gitbook -V 查看gitbook是否安装成功. ref === 1. wanqingwong.com/gitbook-zh/index.html gitbook使用 ==

Git使用基础篇(一些常用命令和原理)

Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版本控制工具可以对开发产生如此之多的影响,文章分为两部分,第一部分介绍Git的一些常用命令,其中穿插介绍Git的基本概念和原理,第二篇重点介绍 Git的使用技巧,最后会在Git Hub上创建一个开源项目开启你的Git实战之旅 1.Git是什么 Git在Wikipedia上的定义:它是一个免费的.分布式的版本控制工具,或是一个强调了速度快的源代码管理工具.Gi

Git 常用命令速查表(图文+表格)

一. Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git commit -am "init" 提交并且加注释 git remote add origin git@192.168.1.119:ndshow git push origin master 将文件给推到服务器上 git remote show origin

DB2 常用命令速查(备忘)

dasauto - 自动启动 DB2 管理服务器    dascrt - 创建 DB2 管理服务器    dasdrop - 除去 DB2 管理服务器    dasmigr - 迁移 DB2 管理服务器    dasupdt - 更新 DB2 管理服务器    db2_deinstall - 卸载 DB2 产品或功能部件    db2_install - 安装 DB2 产品    db2admin - DB2 管理服务器    db2adutl - 管理 TSM 内的 DB2 对象    db2

JVM常用指令速查表

JVM 基本指令 基本指令集是最常用的,总结如下: 指令 释义 iconst_1 int型常量值1进栈 bipush 将一个byte型常量值推送至栈顶 iload_1 第二个int型局部变量进栈,从0开始计数 istore_1 将栈顶int型数值存入第二个局部变量,从0开始计数 iadd 栈顶两int型数值相加,并且结果进栈 return 当前方法返回void getstatic 获取指定类的静态域,并将其值压入栈顶 putstatic 为指定的类的静态域赋值 invokevirtual 调用实

分享下程序员/设计师能用上的 75 份速查表

75 份速查表,由 vikas 收集整理,包括:jQuery.HTML.HTML5.CSS.CSS3.JavaScript.Photoshop .git.Linux.Java.Perl.PHP.Python.Ruby.Ruby on Rails.Scala.C#.SQLite.C++.C语言.Ubuntu.WordPress.Node.js.Oracle.NMAP.Mac OS X.Haskell.Unicode.PostgreSQL.Lisp.Matlab 等. 速查表可能是图片,也可能是 P

Git 常用命令整理

前言 这里就不介绍 git 了,表一看到命令行就怕怕,常用的命令也就这些,基本满足 99% 以上的项目需求,非常实用. 正文 一.常用 git 命令 1.1 git clone <url> [<directory>] 从远程库 clone 代码到本地,directory 用于指定一个新目录名 1.2 git status 检查本地状态,可以查看当前所在分支.新增或被修改的文件 1.3 git checkout <file> 还原某文件所作的修改,也可以 "gi

HTML,CSS,JavaScript速查表推荐

事实上, 速查表 就是来帮助我们把日常中最常用到的信息聚集起来,方便使用,使我们做工作时更有效率.有了它们,免去了你的大脑花额外时间去记忆它们的烦恼--你只需要打开简表,马上能查到你想要的信息. 这篇文章里,你可以看到 最实用的HTML,CSS,JavaScript速查表 ,它们可以当作参考资料,备忘录,能帮助你以最快的速度找到想要的信息. 看看这些简表是不是你想要的,请在文章下面留下你的建议,谢谢! HTML HTML帮助手册 HTML速查手册 HTML特殊字符速查表 Dreamweaver

15张Vim速查表-帮你提高N倍效率

去年上半年开始全面使用linux进行开发和娱乐了,现在已经回不去windows了. 话归正传,在Linux上一直使用vim,慢慢熟悉了它的命令,才终于领悟了什么是编辑器之神. 最近抽空整理了这份速查表,收获颇丰,并分享给大家. 进入vim vim配置 移动光标 屏幕滚动 插入文本类 删除命令 复制粘贴 撤销 搜索及替换 书签 visual模式 行方式命令 若不指定n1,n2,则表示将整个文件内容作为command的输入 | 宏 窗口操作 文件及其他 推荐: 感兴趣的朋友可以关注小编的微信公众号[

Git 常用命令清单(整理且详细)

git工作区,暂存区,版本库之间的关系: 我们建立的项目文件夹就是工作区,在初始化git(git init)版本库之后会生成一个 .git文件,可以将该文件理解成git的版本库repository,.git文件里面还有很多文件其中有一个index文件就是缓存区也叫stage,git还自动生成一个分支master,及指向该分支的指针head. (.命名开头的文件是不可见文件,如果想要显示文件,需要设置:打开计算机->组织->文件夹和搜索选项->查看->高级设置->显示隐藏的文件

日常收集整理的Git常用命令

Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. 查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id git co -- <file> # 抛弃工作区修改 git co . # 抛弃工作区修改 git add <file> # 将工作文件修改提交到本地暂存区 git add

在网上找的创建《CMD命令速查手册》的批处理

在线演示:CMD 命令速查手册 复制代码 代码如下: @echo off & setlocal EnableDelayedExpansion echo.======================================== echo 开始创建<CMD命令速查手册>,请稍候-- echo 创建网页文件头-- >CMDHelp.htm echo ^<head^> >>CMDHelp.htm echo ^<title^>CMD命令速查手册^