Обмеження кількості дескрипторів файлів


34

Я намагаюся встановити 389-ds, і це попереджає мене:

WARNING: There are only 1024 file descriptors (hard limit) available, which limit the number of simultaneous connections.

Я розумію дескриптори файлів, але не знаю про м'які та жорсткі межі.

Коли я біжу cat /proc/sys/fs/file-max, я повертаюся 590432. Це має означати, що я можу відкрити до 590432 файлів (тобто мати до 590432 дескрипторів файлів.

Але коли я бігаю ulimit, це дає мені різні результати:

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024

Але з чого складаються межі жорсткого / м'якого рівня ulimit, і як вони відносяться до кількості, що зберігається /proc/sys/fs/file-max?

Відповіді:


39

Згідно з документацією на ядро , /proc/sys/file-maxце максимальна, загальна, загальна кількість дескрипторів файлів, які ядро ​​виділить перед задушенням. Це обмеження ядра, а не ваш поточний користувач. Таким чином, ви можете відкрити 590432 за умови, що ви один в режимі очікування (режим однокористувача, не працює демонів).

Зауважте, що документація застаріла: файл був proc/sys/fs/file-maxдавно. Дякую Мартіну Джамбону за те, що він це вказав.

Різниця між м'якими та жорсткими межами відповідає тут, на SE . Ви можете підвищити або знизити м'який ліміт, як звичайний користувач, якщо ви не перевищуєте жорсткий ліміт. Ви також можете знизити жорстку межу (але ви не можете підняти її знову для цього процесу). Як суперпользователь, ви можете піднімати і опускати як жорсткі, так і м'які межі. Схема подвійного ліміту використовується для забезпечення системної політики, але також дозволяє звичайним користувачам встановлювати тимчасові обмеження для себе та пізніше їх змінювати.

Зауважте, що якщо ви спробуєте опустити жорстку межу нижче м'якої межі (а ви не суперпользователь), ви EINVALповернетесь (Недійсний аргумент).

Отже, у вашому конкретному випадку ulimit(що таке саме ulimit -Sf) говорить, що у вас немає чіткого обмеження розміру файлів, написаних оболонкою та її підпроцесами . (це, мабуть, хороша ідея у більшості випадків)

Ваш інший виклик, ulimit -Hnзвіти про -nмежі (максимальну кількість відкритих дескрипторів файлів), а НЕ-f межа, тому м'який межа здається вище , ніж жорсткий межа. Якщо ви ввійдете, ulimit -Hfви також отримаєте "необмежену кількість".


14
У Linux 4.4.0 - це шлях до файлу max /proc/sys/fs/file-max.
Мартін Джамбон

будь ласка, чи жорсткий ліміт ulimit -Hn орієнтує саме обмеження системи на виділені можливості дескриптора файлів?
Веб-жінка

2
@Webman: ні, це не так. ulimitвпливає лише на межі поточного процесу . Межі поточного процесу також доручені дітям процесів, але кожен процес має окремий підрахунок. Наприклад ulimit -Hn 10, ви можете одночасно відкрити лише 10 дескрипторів файлів. Кожен створений вами дочірній процес також може містити до 10 дескрипторів файлів. Лише суперпользователь може збільшити ліміт після встановлення. Якщо ви встановите занадто низький рівень, єдиним варіантом може бути вбити процес оболонки і почати новий.
Олексій

0

Системний виклик "select" - одне з безлічі жахливих дизайнерських рішень unix, що дозволяє навіть Windows95 виглядати так добре в порівнянні.

Це було б заборонено 20 років тому, і тоді ми вже можемо без обмежень обробляти файли без проблем.

Ви можете легко збільшити кількість дескрипторів файлів за допомогою конфігурації ядра та усунути їх, але пам'ятайте, що якщо будь-яка бібліотека використовує системний виклик "select", ваша програма стане нестабільною (пошкодження пам'яті) та вийде з ладу.

Вибір може обробляти лише дескриптори файлів від 0 до 1023, і якщо ви подаєте один з більш високим значенням, він випадково заскакує у вашій пам'яті, і вибір ніколи не повторить дескриптор як працюючий. На жаль, багато бібліотек використовують select.


Ваш коментар є корисним попередженням, але замість того, щоб приймати звуковий сигнал, було б набагато корисніше процитувати fd_set(3)довідкову сторінку і про те, що обмеження виходить FD_SETSIZE. І найкраще було б пропозиція про виклик на заміну, як poll(3), наприклад , у цій відповіді
Давор Кубраніч,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.