如何解决Bazaar中的"文件过多"错误?

0 投票
2 回答
3236 浏览
提问于 2025-04-15 18:10

我在使用Bazaar v2.0.1,操作系统是Mac OS X 10.6.2。

当我在移动了很多文件或文件夹(超过10,000个)后进行提交时,出现了以下错误信息:

bzr: 错误: [Errno 24] open: 打开的文件太多: '.'

我最开始的解决办法是把提交分成几个小部分。不过,这样并不理想,我担心有些更改(无法再分成小部分的)也会出现同样的错误。

[更新]

经过一些研究,我发现了以下信息:

看起来:

Errno 24 "open: 打开的文件太多"

这是一个Python错误。

根据这篇博客,可以通过Python脚本中的resource.setrlimit来改变打开文件的数量限制。不过,我其实想找到一种方法,让Bazaar在默认情况下就能使用更高的值(顺便说一下,我的默认设置是2560)。

根据苹果的文档,setrlimit系统调用有一个内置命令叫ulimit,可以用来改变这个设置。任何从终端启动的进程都会继承这个值。

我现在的解决办法是把ulimit -n 10240加到~/.profile文件里。这样当我从终端运行bzr commit时,就能打开10240个文件。我选择10240是因为这是Mac OS X中用户进程允许的最大值。

看起来Bazaar不应该同时打开这么多文件。我担心如果我再移动更多文件,这个问题可能会再次出现。这是Bazaar的一个bug吗?我还有其他解决办法吗?

2 个回答

3

你可以使用 lsof 这个命令来查看所有打开的文件。你可以试着用“grep”命令查找与“bazaar”进程相关的进程ID,或者监控一下打开的文件数量。

需要注意的是,查看所有文件或进程时,你可能需要有管理员权限,也可能不需要,这取决于你的具体情况。

2

在运行bazaar之前,可以试试输入 ulimit -n 1024(或者更大一些),前提是你的命令行支持这个命令(这是bash自带的一个功能)。

补充说明:如果你有 ~/.profile 文件,或者 ~/.bash_profile 文件,可以把这个命令放进去,这样每次打开命令行的时候就会自动执行。

撰写回答