Навіщо обмежувати кількість відкритих файлів та запущених процесів у Linux?


14

Я не маю великих знань про внутрішні розробки операційної системи, тож чому ми маємо обмеження на максимальну кількість відкритих файлів та запущених процесів в Linux?

Буду вдячний, якби хто-небудь міг допомогти мені зрозуміти.

Відповіді:


16

Це в основному з історичних причин. У старих мейнфреймах Linux багато користувачів з'єднували б і використовували ресурси мейнфрейму. Звичайно, потрібно було обмежити, і оскільки такі операції, як ручки файлів і процеси були вбудовані в ядро, воно там було обмежене. Це також допомагає обмежувати атаки, як бомба з вилкою . Захист проти форми бомби з використанням меж процесу показана тут .

Це також допомагає контролювати складні сервіси та демони, не дозволяючи розбіжним розгортанням та відкриттям файлів, як це робить вилка бомба.

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

Якщо ви не запустите Titan з його пам'яттю 584 TiB (ви цього не зробите, оскільки Linux не може бути запущений як один екземпляр на суперкомп'ютері), ви, швидше за все, не скоро досягнете цього обмеження процесу. Навіть тоді середній процес мав би приблизно 146 КБ пам'яті, якщо не було загальної пам'яті.


2
+1 для вилкової бомби, показав, наскільки небезпечними можуть бути ці рекурсивні методи, якщо використовувати їх у снаряді без обережності!
aka_learner

9

У більшості всього, як у житті, так і в Linux, є обмеження. Іноді ліміти дуже високі і їх не варто турбувати, а іноді вони занадто низькі, встановлені довільно лінивим програмістом або встановлені обмеженнями на апаратне забезпечення.

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

Тоді існують обмеження, встановлені обладнанням, наприклад, розмір цілого чи знака. Якщо у вас 32-розрядна система, то існують обмеження, встановлені максимальним розміром цілого числа (4,294,967,295, якщо вони не підписані, або наполовину, якщо вони підписані).


1
Обмеження, які видаються довільними, можуть насправді базуватися на стандартах. Міжнародний стандарт обмежує поштові адреси на 39 символів. Така межа може здаватися довільною. Обмеження в 60 символів для адреси, ймовірно, буде довільним. На жаль, занадто мало програмістів перевіряє стандарти, тому багато (іноді правильних) меж довільно вирішується.
BillThor

Я згоден; коли я ще працював програмістом, я витратив багато часу на пошуки заявлених лімітів, як ви вже сказали, або визначені в ОС як макрос (наприклад, max_path тощо). Але я мушу сказати, що довільні межі, як правило, краще, ніж взагалі відсутні обмеження, особливо для довжин поля. :)
Марті Фрід

7

Для процесів / proc / sys / kernel / pid_max - це максимально допустимий pid, тому це жорстка межа кількості процесів, які можуть запускатися в будь-який момент. Однак обмеження на пам'ять, як правило, грають задовго до цього.

Для верхньої межі відкритих файлів на всій машині / proc / sys / fs / file-max є жорсткою межею; це ґрунтується на обсязі пам’яті в машині, тому вона буде різною. Ядро встановлює так:

    n = (mempages * (PAGE_SIZE / 1024)) / 10;
    files_stat.max_files = max_t(unsigned long, n, NR_FILE);

що виходить приблизно 100 на кожні 1 Мб оперативної пам’яті.

Ліміти на процес різні. ulimit визначить це.


-5

У нас ліміт, тому що у комп’ютерів є обмеження, у мене є 4 Гб оперативної пам’яті, тож я зараз не можу запустити 15 ігор?

Я, швидше за все, можу запустити його з деяким відставанням, але це не було б людиною. Це обмеження на вашому ПК та ядрах Linux, вам знадобиться краще ядро ​​та багато оперативної пам’яті, щоб мати змогу утримувати будь-яку програму, кинуту на вас .

Як і мій ноутбук, коли я працював у Windows 7, я міг грати на Battlefield, але це зайняло 80% моєї оперативної пам’яті, тож якщо я спробував грати в «Need For Speed», це займає 60%. Незмінно я можу відкрити і те, і тоді вся моя система сповільнився, оскільки я запускаю 2 важких програми, вони обидва борються за оперативну пам’ять (пам'ять випадкового доступу)

Коротше кажучи, звичайний комп'ютер не може запускати багато програм одночасно Музика, Блокнот, Браузер, Електронна пошта, Гра, Ви думаєте, що це багато на комп’ютері, але це просто, така гра, як World of Warcraft займає багато більше оперативної пам’яті та робить ваш комп'ютер боротьбою (якщо у вас немає 8-16 ГБ оперативної пам’яті, як це роблять дорогі ноутбуки!)


Дякуємо за інформацію про процеси, як ми знаємо, буде велике навантаження процесора, якщо багато процесів працюватимуть одночасно, а трафік на ядрах процесора буде настільки високим, щоб обробляти його, і з часом ваша система перейде в стан висіття, не даючи належних відрізок часу до будь-якого процесу для виконання, я думаю, якщо я не помиляюся. Але чому також існує обмеження на відкриті файли в Linux?
aka_learner

Я не знаю про обмеження відкритих файлів, я взагалі цього не відчував. Можливо, це ваші комп'ютери обмежені порівняно з моїми, я в цьому не впевнений. У мене завжди відкрито декілька 10 файлів, потім веб-браузер, музичний плеєр та термінал.
Ubisoft Terzuz

Як правило, це відбувається зі мною, коли моя база даних mysql дає мені наступне "120428 20:30:01 [ПОМИЛКА] / usr / sbin / mysqld: Не вдається відкрити файл: './djlabo_open/cart_layout.frm' (помилка: 24)" помилка в журналі журналу помилок, оскільки Linux не дозволяє відкривати цей файл бази даних.
aka_learner

Це, мабуть, щось відмінне від обмеження ОС для відкриття файлів.
Нанна

1
@Terzuz Дійсно базується на тому, чи вважають люди відповіді один одного фактично правильними. Багато людей (включаючи мене, на жаль,) вважають, що ця відповідь може не реально відповідати межам, згаданим у питанні, а іншим обмеженням.
Відновіть Моніку - ζ--
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.