Зачем ограничивать количество открытых файлов и запущенных процессов в Linux?

14

У меня мало знаний о внутренней работе операционной системы, так почему же у нас есть ограничения на максимальное количество открытых файлов и запущенных процессов в Linux?

Буду признателен, если кто-нибудь поможет мне понять.

aka_learner
источник

Ответы:

16

Это в основном по историческим причинам. На старых мэйнфреймах Linux многие пользователи подключались и использовали ресурсы мэйнфрейма. Конечно, это необходимо было ограничить, и поскольку такие операции, как файловые дескрипторы и процессы, были встроены в ядро, оно было ограничено. Это также помогает ограничить атаки, такие как вилочная бомба . Защита от формовой бомбы с использованием технологических ограничений показана здесь .

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

Также следует отметить такие вещи, как объем доступной ОЗУ и ЦП, а также тот факт, что 32-разрядный счетчик может ссылаться только на столько (только 4294967296 записей, которые могут быть подсчитаны 32-разрядным счетчиком), но такие ограничения далеко выше тех, которые обычно устанавливают программисты и системные администраторы. В любом случае, задолго до того, как у вас появилось 4294967296 процессов, ваша машина, вероятно, была бы перезагружена, либо так, как планировалось, либо когда она начала блокироваться из-за нехватки другого ресурса.

Если вы не запустите Titan с его 584 ТБ памяти (вы этого не сделаете, поскольку 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 Kernal. Вам понадобится лучший ядро ​​и много оперативной памяти, чтобы можно было удерживать любую программу, которая вам брошена ,

Как и мой ноутбук, когда я работал под управлением Windows 7, я мог играть в Battlefield, но мне потребовалось 80% моей оперативной памяти, поэтому, если я попытался играть в «Need For Speed», это занимает 60%. Обычно я могу открыть оба, но тогда вся моя система замедлился из-за того, что я запускаю 2 программы Heavy Duty, обе они борются за оперативную память (Random Access Memory)

Одним словом, обычный компьютер не может одновременно запускать множество программ: Музыка, Блокнот, Браузер, Электронная почта, Игра. Вы думаете, что на компьютере много всего, но это просто. Игра вроде World of Warcraft требует больше оперативной памяти и заставляет ваш компьютер бороться (если у вас нет 8-16 ГБ оперативной памяти, как у дорогих ноутбуков!)

Ubisoft Terzuz
источник
Спасибо за информацию о процессах, поскольку мы знаем, что будет высокая нагрузка на ЦП, если многие процессы будут выполняться одновременно, и трафик на ядрах ЦП будет настолько высоким, чтобы справиться с этим, и со временем ваша система перейдет в состояние зависания, не давая должного временной интервал для выполнения любого процесса, я думаю, если я не ошибаюсь. Но почему в Linux есть ограничение на количество открытых файлов?
aka_learner
Я не знаю о пределе открытых файлов, я вообще этого не испытывал, Может быть, это ваши компьютеры ограничены по сравнению с моими, в этом я не уверен. У меня всегда открыто несколько 10 файлов, затем открываются веб-браузер, музыкальный проигрыватель и терминал.
Ubisoft Terzuz
Обычно это происходит со мной, когда моя база данных mysql выдает мне следующее «120428 20:30:01 [ОШИБКА] / usr / sbin / mysqld: Не удается открыть файл: './djlabo_open/cart_layout.frm' (errno: 24)» ошибка в журнале ошибок, потому что Linux не позволяет ему открыть этот файл базы данных.
aka_learner
Возможно, это что-то отличное от предела ОС для открытия файлов.
Нанн
1
@Terzuz Это действительно основано на том, считают ли люди ответы друг друга фактически правильными. Многие люди (в том числе и я, к сожалению) чувствуют, что этот ответ может касаться не ограничений, упомянутых в вопросе, а других ограничений.
Восстановить Монику - Nov--