2010-01-18 163 views
0

我使用的是Mac OS X集市V2.0.1 10.6.2如何解决Bazaar中的“太多打开的文件”错误?

当我执行移动大量的文件/目录(10000)提交后,我得到了以下错误消息:

bzr: ERROR: [Errno 24] open: Too many open files: '.'

我的第一个解决方法是将提交分成几个子集。然而,这并不理想,我担心可能会有一个变化(不能被分解为子集)会给我带来同样的错误。

[更新]

做一些研究,这是我发现后:

它看起来像:

Errno 24 "open: Too many open files"

是一个Python错误。

根据this blog post,打开的文件数量的限制可以从Python脚本中更改为resource.setrlimit。然而,我真的想找一种方法来改变默认值,所以Bazaar会自动运行一个更高的值(顺便说一句,它看起来像我的默认设置是2560)。

根据setrlimit系统调用的apple文档,有一个sh内置命令,称为ulimit可用于更改设置。任何从shell启动的进程都会继承这个值。

我目前的解决方法是将ulimit -n 10240添加到〜/ .profile。这样,当我从shell运行bzr commit时,它将能够打开10240个文件。我选择了10240个文件,因为这是Mac OS X中用户进程所允许的最大数量。

看起来Bazaar似乎并不需要一次打开许多文件。我担心,如果我移动更多的文件,这可能会再次咬我。这是Bazaar中的错误吗?还有什么我可以做的吗?

+1

当你说大量的文件/目录,约。多少?数百?成千上万的? – 2010-01-18 21:32:26

+1

关闭一些文件? (只是在开玩笑;) – Cyclone 2010-01-18 21:34:54

+0

@Frank,我相信有超过10,000个文件已被移动。但是为什么Bazaar在执行提交时需要所有的开放?这些文件已经在文件系统中移动了。 – Trent 2010-01-18 21:47:27

回答

2

尝试ulimit -n 1024(或更多)之前运行义卖,如果你的shell支持它(这是一个bash内置)。

Jinx!编辑:你可以把它放在你的~/.profile,如果有的话,或者~/.bash_profile

+0

1024比我的默认设置更小,所以我将它设置为更大。 – Trent 2010-01-18 21:46:52

3

您可以使用lsof查看所有打开的文件。您可以尝试对bazaar进程的pid进行搜索,或者监视打开文件的数量。

请注意,您可能需要或可能不需要root用户才能查看与您的情况相关的所有文件/进程。

+0

好吧,所以如果我得到义卖会已经打开的文件列表,那对我有什么帮助?它仍然会出错。 – Trent 2010-01-18 21:48:58

+0

当存在错误或其他应用程序行为不当并窃取所有文件描述符时,它会有所帮助。我其实从来没有考虑过你的限制足够低而导致问题。 – 2010-01-18 21:58:59

相关问题