Как устранить ошибку «Слишком много открытых файлов» на базаре? - PullRequest
0 голосов
/ 19 января 2010

Я использую Bazaar v2.0.1 на Max OS X 10.6.2

Когда я выполняю коммит после перемещения большого количества файлов / каталогов (более 10000), я получаю следующее сообщение об ошибке:

bzr: ОШИБКА: [Errno 24] открыто: слишком много открыть файлы: '.'

Мой первый обходной путь состоял в том, чтобы разбить коммит на несколько подмножеств. Однако это не идеально, и я боюсь, что может быть момент, когда одно изменение (которое не может быть разбито на подмножества) даст мне ту же ошибку.

[Update]

После некоторых исследований я нашел следующее:

Похоже:

Errno 24 "open: Too many open files"

- ошибка Python.

Согласно этой записи в блоге ограничение на количество открытых файлов может быть изменено из скрипта Python с помощью resource.setrlimit. Однако я действительно искал способ изменить значение по умолчанию, чтобы Bazaar автоматически запускался с более высоким значением (кстати, похоже, что моей настройкой по умолчанию было 2560).

Согласно документации Apple для системного вызова setrlimit существует встроенная команда sh под названием ulimit , которую можно использовать для изменения настройки. Любой процесс, запущенный из оболочки, будет наследовать это значение.

Мой текущий обходной путь - добавить ulimit -n 10240 к ~ / .profile . Таким образом, когда я запускаю bzr commit из оболочки, он сможет открыть 10240 файлов. Я выбрал 10240 файлов, поскольку это максимально допустимый пользовательский процесс в Mac OS X.

Не похоже, что для Bazaar нужно открывать столько файлов одновременно. Я обеспокоен тем, что если я когда-нибудь переместлю больше файлов, это может снова вернуться к укусу. Это ошибка на базаре? Я могу еще что-нибудь сделать?

Ответы [ 2 ]

3 голосов
/ 19 января 2010

Вы можете использовать lsof, чтобы просмотреть все открытые файлы. Вы можете попытаться выполнить поиск pid в базарном процессе или отслеживать количество открытых файлов.

Обратите внимание, что для просмотра всех файлов / процессов, относящихся к вашей ситуации, вам может потребоваться или не быть пользователем root.

2 голосов
/ 19 января 2010

Попробуйте ulimit -n 1024 (или более) перед запуском базара, если ваша оболочка поддерживает его (это встроенная функция bash).

сглазить! редактировать: вы можете поместить его в ~/.profile, если он есть, или ~/.bash_profile.

...