linux - 为什么 git 在使用 "Too many open files"推送/获取时失败

标签 linux git config

我遇到 Git 问题,收到以下消息:

> git fetch
error: cannot create pipe for ssh: Too many open files
fatal: unable to fork

系统管理员增加了我的文件限制,但没有解决问题。此外,我对使用 vi 创建新文件没有任何问题。

尝试推送新分支时,我收到类似的消息:

git push origin test_this_broken_git error: cannot create pipe: Too many open files fatal: send-pack: unable to fork off sideband demultiplexer

有人能准确回答为什么会这样吗?我最近没有对我的 git 配置进行任何更改,并且已经手动验证了这一点。

最佳答案

有两条类似的错误信息:

EMFILE: Too many open files
ENFILE: Too many open files in system

看起来您正在获取 EMFILE,这意味着超出了单个进程的文件数。因此,检查 vi 是否可以打开文件是无关紧要的——vi 将使用它自己的、单独的文件表。检查您的限制:

$ ulimit -n
1024

所以在我的系统上,单个进程中有 1024 个打开文件的限制。您不需要询问您的系统管理员(请不要使用缩写词 SA,它太不透明;如果您必须缩写,请使用“sysadmin”)来提高限制。

您可能希望通过在 strace 下运行 Git 来检查 Git 打开了哪些文件。

这可能是 Git 或库中的错误,也可能是您使用的是旧版本的东西,也可能是更奇怪的东西。首先尝试 strace 以查看它打开了哪些文件,并检查 Git 是否关闭了这些文件。

来自 Hazok 的更新:

按照上面的建议,原来是松动的东西太多导致的。松散的对象太多,因为 git gc 没有经常运行。

关于linux - 为什么 git 在使用 "Too many open files"推送/获取时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15375454/

相关文章:

php - 如何在 linux vps 上更新 PHP 5.3 版本

python - 在 Python 中使用 Grep 查找行

java - git/GitHub 属性配置

openssl - CFSSL 配置与 OpenSSL 配置

php 配置文件,公共(public)函数 connect() 错误

linux - git clone - 从 Windows 命令行运行时权限正常,但从 Cygwin 运行则不行

C++ boost 错误

git - 使用 git rebase -i 更改以前提交的代码

git - 在 git branch 中退后几个修改

java - 与MySQL的连接错误;无法访问