我遇到 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/