Как изменить значение 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.

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

ulimit [options [limit]]

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

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

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

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

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

ulimit -Hn
1048576

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

ulimit -Sn
1024

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

ulimit -n 3000

Проверяем:

ulimit -Sn
3000
ulimit -Hn
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 из командной строки.

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

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:

...
fs.file-max=250000
...

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

sysctl -p
fs.file-max = 250000
tweet Share