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