如何解决Bazaar中的"文件过多"错误?
我在使用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 个回答
你可以使用 lsof
这个命令来查看所有打开的文件。你可以试着用“grep”命令查找与“bazaar”进程相关的进程ID,或者监控一下打开的文件数量。
需要注意的是,查看所有文件或进程时,你可能需要有管理员权限,也可能不需要,这取决于你的具体情况。
在运行bazaar之前,可以试试输入 ulimit -n 1024
(或者更大一些),前提是你的命令行支持这个命令(这是bash自带的一个功能)。
补充说明:如果你有 ~/.profile
文件,或者 ~/.bash_profile
文件,可以把这个命令放进去,这样每次打开命令行的时候就会自动执行。