Лимит файловых дескрипторов linux

Как изменить значение Open File Limit — 3 варианта

Feb 1, 2018 08:56 · 488 words · 3 minute read ulimit

Операционная система при открытии файла создает временный номер (неотрицательное целое число), называемый файловым дескриптором. Данный дескриптор (handle) можно использовать для работы с файлом.

Специальная область памяти зарезервирована под файловые дескрипторы, и именно от ее размера зависит, сколько файлов может быть открыто одновременно. Давайте разберемся, какими способами можно изменить значение Open File Limit в ОС Linux!

Операционной системе требуются ресурсы (прежде всего память) для управления каждым открытым файлом. Чтобы не возникла ситуация, когда один процесс завладел всеми доступными ресурсами операционной системы были введены лимиты. В ОС Linux существует два вида лимитов:

  • soft limit — значение может изменяться во время выполнения процесса;
  • hard limit — максимальное значение, которое не может быть превышено установкой значения soft limit .

Максимальное значение открытых файловых дескрипторов (файлы, которые пользователь открыл с момента логина) в системе можно просмотреть так:

cat /proc/sys/fs/file-max 798066 

Иногда по некоторым причинам требуется увеличить число доступных файловых дескрипторов для всей системы или для конкретного процесса. Сделать это можно следующими способами:

Вариант 1, используя ulimit .

Синтаксис команды следующий:

Опции могут быть следующими:

  • -a — вывод текущих значений;
  • -f — лимит размера файлов которые, могут быть созданы командной оболочкой;
  • -n — лимит количества открытых файловых дескрипторов;
  • -H и -S — Hard и Soft лимиты соответственно.

Смотрим текущий лимит на файловые дескрипторы:

ulimit -a | grep open Maximum number of open file descriptors (-n) 1024 

Смотрим значение жесткого (Hard) лимита:

Смотрим значение мягкого (Soft) лимита:

Меняем значение Hard / Soft лимитов на 3000:

Новые лимиты будут дествительны до перезагрузки компьютера.

Вариант 2, с помощью Pluggable Authentication Modules (PAM).

Настройка PAM модулей в большинстве Linux дистрибутивов осуществляется в файле /etc/security/limits.conf . В файле присутствуют 4 поля:

  • domain — описывает сущность, к которой будут применены лимиты. Это может быть имя пользователя, имя группы или * — все, кроме пользователя root;
  • type — в данном полу указывают тип лимита, может быть hard , soft или — что означает оба;
  • item — определяет тип элемента для установки лимита, например nofile (the number of open data files), fsize (the size of files created by the user), core (the size of core files) и т.д.;
  • value — значение которое будет установлено.

Для установки максимального количества открытых файлов для всех пользователей в файл /etc/security/limits.conf добавляем следующие строки:

. * hard nofile 20000 * soft nofile 15000 . 

после чего перелогиниться в системе (или перезагрузиться).

Вариант 3, изменение общесистемных (system wide) лимитов.

В Linux-дистрибутивах существует значение file-max — максимальное количество файловых дескрипторов (значение подразумевает, что операционную систему используют несколько пользователей). Этот параметр можно изменить отредактировав конфигурационный файл /etc/sysctl.conf или напрямую изменив fs.file-max из командной строки.

Читайте также:  Nvidia linux secure boot

Текущее значение открытых файлов:

cat /proc/sys/fs/file-max 798066 

Меняем значение из командной строки:

sysctl -w fs.file-max=250000 fs.file-max = 250000 
cat /proc/sys/fs/file-max 250000 

Данные значения будут действительны до следующей перезагрузки компьютера. Чтобы изменения остались, нужно внести их в файл /etc/sysctl.conf :

после чего выполнить команду:

sysctl -p fs.file-max = 250000 

Источник

3 способа изменить ограничение на количество открытых файлов в ОС Linux

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

Зачем суживать количество открытых файлов

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

  • Soft Limit Свойство, которое может быть изменено процессом в любое время.
  • Hard Limit обозначает наибольшее значение, которое не может быть превышено путем установки мягкого ограничения

Вы можете увидать максимальное количество открытых файловых дескрипторов в вашей системе Linux, как показано ниже:
# cat /proc/sys/fs/file-max100576
Свойство показывает количество файлов, которые пользователь может открыть за сеанс входа в систему, но вы обязаны заметить, что результат может отличаться в зависимости от вашей системы. По некоторым причинам может понадобиться увеличить значение набора ограничений. Вот почему ваша система Linux предлагает возможность (повышая или уменьшая) изменять эти ограничения, изменяя максимальное количество открытых файлов на процесс и на систему.

Бригада ulimit

Команду ulimit можно использовать для увеличения количества файлов, которые можно раскрыть в оболочке. Эта команда является встроенной командой bash, поэтому она влияет только на bash и програмки, запускаемые из него. Синтаксис ulimit следующий:
Ulimit [options [limit]]
Параметры определяют, что довольствуется. Вы можете увидеть некоторые варианты, как показано ниже

  • -a (Передача текущих настроек): заставляет ulimit извещать о своих текущих настройках.
  • -f (Ограничения файлов) ограничивает размер файлов, которые могут быть сделаны оболочкой.
  • -n Ограничивает количество открытых файловых дескрипторов.
  • -H и -S (Жесткие и мягкие ограничения) параметры меняют другие параметры, в результате чего они устанавливаются как жесткие или мягкие ограничения соответственно. Жесткие ограничения смогут впоследствии не увеличиваться, но мягкие ограничения могут быть. Если ни один из вариантов не предусмотрен, ulimit ставит как жесткие, так и мягкие ограничения для указанной функции.
Читайте также:  Arch linux grub config

Итак, чтобы увидеть текущее ограничение, вы сможете сделать, как показано ниже:
$ ulimit — a | grep openopen files (-n) 1024
Вы можете проверить жесткий предел, как показано ниже:
$ ulimit — Hn4096
И мягкий предел, как показано ниже:
$ ulimit — Sn1024
Вы можете изменить ограничение, как представлено ниже
$ ulimit — n 3000
И вы можете проверить это ниже:
$ ulimit — n 3000
Проблема сейчас в том, что если вы выйдете из системы и войдете в систему или перезагрузите пк, значение будет сброшено. Помните, что для того, чтобы сделать эти ограничения более постоянными, нужно отредактировать один из файлов конфигурации пользователя ( .bashrc or .profile ) или общесистемные файлы конфигурации ( /etc/bashrc or /etc/profile ) приплюсовав командную строку ulimit в конец файла, как показано ниже.
# vim. bash_profileulimit — n 3000
Теперь, простонар если вы перезагрузитесь, ограничение, установленное пользователем, будет постоянным. Вы можете увеличить только твердый лимит ( -Hn ) или мягкий лимит ( -Sn ), но вы должны заметить, что мягкие ограничения могут быть установлены другым пользователем, в то время как жесткие ограничения могут быть изменены только пользователем root после его аппараты.

Модуль подключаемых модулей аутентификации (PAM)

Устанавливать такие ограничения лучше всего с помощью Включаемых модулей аутентификации (PAM), называемых Pam_limits. Большинство основных дистрибутивов Linux используют этот часть как часть своей стандартной конфигурации PAM, поэтому он уже присутствует в некоторых системах Linux, но вам нужно станет настроить его, отредактировав /etc/security/limits. conf файл. Этот файл содержит четыре главных поля:

  • Домен: Он описывает сущность, к которой применяется ограничение. Это может быть имя пользователя, заглавие группы (с формой @groupname) или подстановочный знак со звездочкой ( * ), который соответствует всем. Хотя вы должны заметить, что подстановочный знак не применяется к корневому пользователю
  • Тип: В этом поле указывается ограничение как безжалостное или мягкое. Жесткий лимит устанавливается системным администратором и не может быть превышен ни при каких жизненных обстоятельствах, в то время как пользователь может временно превысить мягкий лимит. Вы также можете использовать тире ( — ), дабы указать, что ограничение является как жестким, так и мягким. Обратите внимание, что мягкий лимит может быть повышен до значения жесткого лимита
  • Элемент: Он указывает, какой тип элемента ограничен. Это может быть Nofile (число открытых файлов данных), Fsize (размер файлов, созданных пользователем), Core (размер главных файлов) и т.д.
  • Значение: Оно указывает значение, которое должно быть применено к пределу

Вы можете увидать, например, содержимое этого файла, как показано ниже:

# tail — f — n 12 /etc/security/limits. conf # ##* soft core 0#* hard rss 10000#@student hard nproc 20#@faculty soft nproc 20#@faculty hard nproc 50#ftp hard nproc 0#@student — maxlogins 4# End of file

Дабы отредактировать максимальное количество открытых файлов для всех пользователей, вы можете добавить, например, приплюсовать в конец файла строки ниже:

# vim /etc/security/limits. conf* hard nofile 20000* soft nofile 15000

После данного вам необходимо отредактировать файл /etc/pam. d/login

# vim /etc/pam. d/loginsession required pam_limits. so

Затем сохраните файл. Вы сможете проверить результат, как показано ниже:

Читайте также:  Linux list packages ubuntu

Общесистемный предел

В системе Linux у нас есть Файл-макс, какой является максимальным дескриптором файлов (FD), и настройки по умолчанию для ulimit и file-max предполагают, что несколько юзеров будут совместно использовать систему. Вот почему эти настройки ограничивают количество ресурсов, используемых любым пользователем. Вы можете увеличить количество открытых файлов в Linux, отредактировав /etc/sysctl. conf или путем редактирования директивы Fs. file-max

Вы сможете увидеть текущее значение для открытых файлов с помощью команды

И вы можете менять значение по умолчанию, как показано ниже:

# sysctl — w fs. file-max=250000fs. file-max = 250000

Вы можете проверить итог, как показано ниже

С помощью Sysctl command, изменения применяются до следующей повторная загрузки. Чтобы сделать конфигурацию постоянной, вы можете напрямую отредактировать /etc/sysctl. conf файл, как представлено ниже:

# vim /etc/sysctl. conffs. file-max=250000

Если вы перечислите содержание /proc/sys/fs/file-max , вы увидите, что модифицирование не вступило в силу напрямую. Теперь вам нужно напрямую применить изменения с помощью опции — p бригады sysctl, как показано ниже:

# sysctl — pfs. file-max = 250000

Теперь конфигурация является постоянной.

Источник

Upper limit of file descriptor in Linux

Well, in that case, you are good with using ulimit for setting per process fd limits and as in my answer, you can use file-max or file-nr(based on which one suits you better) for system-wide fd limits. You might also want to increase the /proc/sys/kernel/pid_max limit if you are going to run several processes.

2 Answers 2

You want to look at /proc/sys/fs/file-max instead.

From the recent linux/Documentation/sysctl/fs.txt:

file-max and file-nr:

The kernel allocates file handles dynamically, but as yet it doesn’t free them again.

The value in file-max denotes the maximum number of file- handles that the Linux kernel will allocate. When you get lots of error messages about running out of file handles, you might want to increase this limit.

Historically, the three values in file-nr denoted the number of allocated file handles, the number of allocated but unused file handles, and the maximum number of file handles. Linux 2.6 always reports 0 as the number of free file handles — this is not an error, it just means that the number of allocated file handles exactly matches the number of used file handles.

Attempts to allocate more file descriptors than file-max are reported with printk, look for «VFS: file-max limit reached».

The 2.6 kernel uses a rule of thumb to set file-max based on the amount of memory in the system. A snippet from fs/file_table.c in the 2.6 kernel:

/* * One file with associated inode and dcache is very roughly 1K. * Per default don't use more than 10% of our memory for files. */ n = (mempages * (PAGE_SIZE / 1024)) / 10; files_stat.max_files = max_t(unsigned long, n, NR_FILE); 

The files_stat.max_files is the setting of fs.file-max . This ends up being about 100 for every 1MB of ram.(10%)

Источник

Оцените статью
Adblock
detector