1

У меня есть приложение, которое создает 16 ^ 5 файлов (1048576). Я могу настроить его так, чтобы все они создавались в одной и той же папке или были разделены так, как я хочу (имея 1, 2, 3 или 4 подпапки в каждой папке). Пример:

/*

или же

/a/*
.
.
.
/f/*

или же

/a/a/*
/a/b/*
.
.
.
/f/f/*

или же

/a/a/a/*
.
.
.
/f/f/f/*

или же

/a/a/a/a/*
/a/a/a/b/*
.
.
.
/f/f/f/f/*

Все файлы имеют менее 4 КБ. Я использую Ubuntu 12.10 64bit и раздел ext4 для хранения этого. Какая структура папок будет лучшей структурой для этого случая? Может быть, другая файловая система будет лучше всего подходит для этого случая, какие-нибудь идеи?

В любом случае я пытаюсь запустить этот алгоритм, я должен быть в состоянии открыть файлы 9999999:

user@pc$ ulimit
unlimited

user@pc$ cat /proc/sys/fs/file-max
9999999

user@pc$ cat /etc/sysctl.conf
fs.file-max = 9999999

Тем не менее, когда я запускаю его, сохраняя все в одной папке, вызов fopen завершается ошибкой около 999999 файлов:

user@pc$ ls database/ | wc -l
999958

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

1 ответ1

1

Если вы посмотрите на proc(5), /proc/sys/fs/file-max «определяет общесистемное ограничение на количество открытых файлов для всех процессов». В частности, это не говорит о том, что один процесс может открыть столько файлов.

Возможно, вы захотите обратиться к sysconf(3), который описывает OPEN_MAX как «Максимальное количество файлов, которые процесс может открыть в любое время». Вы можете получить это значение, запустив getconf OPEN_MAX .

Я на самом деле не знаю, насколько велико вы можете сделать OPEN_MAX , и я не склонен к дальнейшему расследованию в этот час, но не стесняйтесь экспериментировать и сообщать нам.

Кстати, я бы также запустил ulimit -a чтобы показать все ограничения. Запуск только ulimit в bash подразумевает ulimit -f , который показывает только максимальный размер файлов, написанных оболочкой и ее дочерними элементами.

PS Если ваше приложение должно одновременно содержать миллион файлов, я настоятельно рекомендую переоценить ваш дизайн.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .