Увеличение лимита запускаемых файлов в Linux

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

И если при использовании Linux как домашней системы достижение таковых ограничений маловероятно, то при высоконагруженном серверном использовании их достижение и получение ошибки «Too many files open» становится вопросом времени.

Точное максимально допустимое число открытых файлов варьируется между разными ОС семейства. Для успешных манипуляций над этими параметрами, чаще всего, пользователь должен иметь root-права в системе.

Просмотр и изменение лимитов ОС

Некоторая информация об открытых файловых дескрипторах и лимитах системы совместно хранится в файле /proc/sys/fs/file-nr. В нём сохранены разделённые пробелом число всех открытых файлов, открытых неиспользуемых файлов и сам лимит.

Однако непосредственное место хранения лимитов – настройка ядра Linux fs.file-max. Её изменение на время (до перезагрузки) доступно командой:

sysctl -w fs.file-max=newlimit

Где newlimit – новый лимит, который вы хотите установить. Например, следующая команда установит лимит возможных к открытию файлов в 60000:

sysctl -w fs.file-max=60000

Для изменения данного параметра на постоянной основе, необходимо добавить запись fs.file-max=newlimit в файл конфигурации sysctl.conf в директории etc. В некоторых современных ОС его местоположение и название могут быть изменены. Однако сделанные таким образом изменения применятся лишь после перезагрузки системы, если не использовать команду sysctl -p.

Лимиты для пользователей

Лимиты на открытие файловых дескрипторов для отдельных пользователей ОС должны быть меньше, чем общесистемный. Они бывают двух видов: мягкие и жёсткие лимиты. После превышения мягкого лимита открытие новых файлов вызывает предупреждение о его превышении, превышение жёсткого – ведёт к ошибке и невозможности открыть новые файлы.

Проверка значений мягких и жёстких ограничений осуществляется командой ulimit с опциями -Sn и -Hn соответственно. Для их изменения можно добавить новые параметры в файл /etc/security/limits.conf. Запись параметров должна иметь вид

Username limit_type nofile newlimit

Где Username – имя пользователя (можно заменить на *, чтобы распространить на всех пользователей помимо root), limit_type – hard или soft, newlimit – новый лимит файлов. Следующие добавленные записи установят появление предупреждений для пользователя linuxlessons на отметку 45000 открытых файлов, а реальный лимит – на 50000.

linuxlessons soft nofile 45000

linuxlessons hard nofile 50000

В свою очередь записи вида:

* soft nofile 45000

* hard nofile 50000

Распространят аналогичные правила на всех пользователей.

В некоторых системах, вроде Debian, настройки из файла конфигураций limits.conf могут не подгружаться автоматически. Необходимо проверить наличие записи session required pam_limits.so в /etc/pam.d/common-session или /etc/pam.d/login (файл различается в зависимости от конкретной ОС).

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

  • ulimit -n newlimit.

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

Ссылка на основную публикацию