Назад | Перейти на главную страницу

Каковы последствия увеличения максимального количества дескрипторов открытых файлов?

Похоже, что в Ubuntu ограничение по умолчанию составляет 1024 дескриптора открытых файлов. Nginx жаловался во время некоторого нагрузочного тестирования, которое я проводил, что было достигнуто максимальное количество, и сервер в основном был непригоден для использования.

Я тестирую службу, которая должна будет обрабатывать 2–3 тыс. Запросов в секунду, и каждый запрос будет сохраняться в файл (или, возможно, в другое хранилище, например, mysql и т. Д.). Эти файлы будут удалены с сервера в течение x минут.

Если я запустил ulimit -n и увеличил количество дескрипторов открытых файлов, какие последствия это имеет? Заставляет ли операционная система выделять больше памяти для управления файловыми дескрипторами или есть еще кое-что?

Я думал, что простой поиск в Google даст ответ, но мне помешали. Я потратил некоторое время на изучение исходников Linux и обнаружил file_table.c. files_init внизу этого исходного файла - это место, где инициализируется таблица открытых файлов, и у нее есть этот комментарий:

/*
 * One file with associated inode and dcache is very roughly 1K.
 * Per default don't use more than 10% of our memory for files. 
 */ 

логика в этой функции устанавливает максимальное значение max_files из запрошенного максимума (NR_FILES) или 10% системной памяти. Очевидно, каждый открытый файл занимает около 1 КБ памяти.

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

Я не думаю, что есть какие-то реальные недостатки в установке максимального количества файлов на очень большое количество, вплоть до (2 ^ 20 из этого вопрос о переполнении стека. Однако, если каждый открытый файл занимает 1 КБ, у вас, очевидно, закончится системная память задолго до того, как вы достигнете этого предела.

Мой совет - установить максимальное количество открытых файлов в вашей системе. Если каждый открытый файл занимает около 1 КБ, то 128 000 открытых файлов будут занимать всего около 128 МБ ОЗУ вашей системы. Это не должно быть большой проблемой в современной системе с большим количеством ГБ оперативной памяти.

Отказ от ответственности: я основываю все это на моих личных знаниях системного администратора и очень поверхностном чтении исходного кода Linux. Я не хакер ядра.

в операционных системах типа unix файловые дескрипторы используются практически для всего, что читает или записывает: устройства io, каналы, сокеты и т. д. Обычно вы изменяете это ограничение при использовании Oracle или веб-серверов. Причина того, что лимит низок, заключается в том, что числа были получены, когда пользователи делили систему. Единственный реальный вред будет, если у вас будет мало памяти, но обычно вы можете установить это значение на 30 КБ для высокопроизводительных серверов.