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

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

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

14
задан 14 November 2012 в 09:47

4 ответа

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

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

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

Если вы не запустите Titan с его 584 ТБ памяти (вы не будете, поскольку Linux не может быть запущен как один экземпляр на суперкомпьютере), вы, вероятно, не достигнете этого процесса ограничить в ближайшее время. Даже в этом случае средний процесс имел бы только приблизительно 146 КБ памяти, при условии отсутствия общей памяти.

0
ответ дан 14 November 2012 в 09:47

Есть ограничения для всего, как в жизни, так и в Linux. Иногда ограничения очень высоки, и о них не стоит беспокоиться, а иногда они слишком малы, произвольно устанавливаются ленивым программистом или устанавливаются аппаратно.

Произвольные ограничения возникают, когда программист принимает решение, например, максимальное количество символов, допустимое в поле, например, адрес. Намного проще установить произвольный предел, чем динамически распределять память по мере необходимости. Вы не хотите выделять всю доступную память для простого поля ввода, но не хотите, чтобы ввод перезаписывал другую память, которая также может быть важной. Для открытых файлов и процессов может быть произвольное ограничение или оно может быть ограничено доступной памятью. Если последнее, то плохие вещи начнут происходить, когда вы приблизитесь к пределу, и система может зависнуть, поэтому часто полезно иметь ограничение, которое вступает в действие до того, как это произойдет. Иногда произвольные ограничения могут быть определены при запуске в зависимости от памяти или дискового пространства, и, как правило, они довольно интеллектуальные, но все же произвольные - кто-то решил, где производительность станет невыносимой или опасной, и установил ограничения, чтобы избежать такой ситуации.

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

0
ответ дан 14 November 2012 в 09:47

У нас есть ограничение, потому что у компьютеров есть ограничения, у меня есть 4 ГБ ОЗУ, поэтому я не могу сейчас запустить 15 игр?

Я, скорее всего, могу запустить его с некоторой задержкой, но это не так будь человеком, это предел для твоего ПК и Linux Kernal, тебе понадобится лучший ядро ​​и много оперативной памяти, чтобы можно было держать любую программу, которая тебе брошена.

Как и мой ноутбук, когда я работал под управлением Windows 7, я мог играть в Battlefield, но мне потребовалось 80% ОЗУ, поэтому, если я попытался сыграть в «Need For Speed», это займет 60%. Обычно я могу открыть оба, но затем мой вся система замедлена, так как я запускаю 2 программы для тяжелых условий, они оба борются за оперативную память (оперативное запоминающее устройство)

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

0
ответ дан 14 November 2012 в 09:47

Для процессов / 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 определит их.

0
ответ дан 14 November 2012 в 09:47

Другие вопросы по тегам:

Похожие вопросы: