2010-01-18 159 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

相關問題