Как изменить значение Open File Limit — 3 варианта
Feb 1, 2018 08:56 · 488 words · 3 minute read
Операционная система при открытии файла создает временный номер (неотрицательное целое число), называемый файловым дескриптором. Данный дескриптор (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