Skip to content

Максимальное количество открытых файлов для Linux

1. Обзор

1.1 Описание проблемы

При развертывании приложения sailsoft на сервере Linux возникает ошибка, сообщающая о слишком большом количестве открытых файлов или слишком большом количестве открытых файлов, как показано на следующем рисунке:

37.png

1.2 Анализ причин

В системе Linux по умолчанию установлено максимальное количество файлов, открываемых системным приложением, равное 1024, при выполнении BI будет считывать данные, сохраненные локально. В некоторых случаях количество файлов, открываемых BI, превышает этот лимит, поэтому вам необходимо вручную изменить максимальное количество файлов, открываемых системой linux. Эта модификация включает в себя 3 ключевых значения в разных случаях.

2. описание параметров

2.1 Знакомство с параметрами

параметрическийинструкциизначение по умолчанию
nofileМаксимальное количество открытых файлов для одного процесса1024
nr_openМаксимальное количество файлов, которое может быть выделено одному процессу1024*1024=1048576
file-maxМаксимальное значение, которое ядро системы может открыть в целом185745

2.2 Модификация стратегии

В общем случае значение nofile не должно превышать значения nr_open и file-max. Поэтому при изменении nofile необходимо учитывать, не превышает ли значение nofile два вышеуказанных значения:

  • Если изменяемое значение "nofile" не превышает значений "nr_open" и "file-max", измените значение "nofile" напрямую.
  • Если изменяемое значение "nofile" превышает значения "nr_open" и "file-max", необходимо изменить не только значение "nofile", но и значения "nr_open" и "file-max", чтобы удовлетворить значение "больше, чем nofile".

2.3 Просмотр размеров параметров

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

параметрическийформулировка запроса
nofileulimit -n
nr_opencat /proc/sys/fs/nr_open
file-maxcat /proc/sys/fs/file-max

3. Измените значение nofile

Если изменяемое значение параметра "nofile" (максимальное количество открытых файлов) не превышает значений параметров "nr_open" и "file-max", вы можете изменить значение параметра "nofile" напрямую.

3.1 Временное вступление в силу

Введите ulimit -n 128000, как показано ниже:

7.png

3.2 Постоянное вступление в силу

Примечание: После выполнения шага 1 в разделе 3.1 непосредственно выполните reboot, чтобы перезагрузка сервера вступила в силу; если вы не хотите перезагружать сервер, вы можете обратиться к полным шагам в этом разделе (но вам нужно перезагрузить проект).

1) С помощью vi /etc/security/limits.conf отредактируйте файл limits.conf и измените значение nofile (где 128000 - это измененное значение nofile), как показано ниже:

vi /etc/security/limits.conf #Войдите в экран редактирования файла * soft nofile 128000 #Убедитесь, что эта строка присутствует * hard nofile&#; 128000 #Убедитесь, что эта строка присутствует nbsp;128000 #Убедитесь, что строка присутствует.

Примечание: В некоторых системах необходимо заменить "*" на конкретное имя пользователя, чтобы оно вступило в силу, например, root soft nofile 128000.

13.png

2) Отредактируйте файл /etc/pam.d/login и убедитесь, что в нем есть следующее, как показано ниже:

требуется сессия pam_limits.so

10.png

(3) После завершения настройки, конечный пользователь должен повторно войти в систему и перезапустить проект Tomcat, после чего конфигурация вступит в силу. Как показано на рисунке ниже:

1622787438237364.png

4. значения nr_open и file-max

4.1 Временное вступление в силу

  
echo 1200000 > /proc/sys/fs/nr_open echo 200000 > /proc/sys/fs/file-max

4.2 Постоянный эффект: требуется перезагрузка сервера

Если максимальное количество открытых файлов, подлежащих модификации, превышает nr_open и file-max, необходимо изменить значение на большее. Метод модификации следующий:

Добавьте следующий код в файл/proc/sys/fs/nr_open: (1200000 - измененное значение параметра)

fs.nr_open=1200000

Вставьте следующий код в файл /proc/sys/fs/file-max:

fs.file-max=200000

Сохраните и выполните команду reboot, чтобы перезагрузить сервер.

Примечание: Параметр ядра Linux nr_open может быть установлен только в том случае, если версия ядра 2.6.25 или более поздняя. Чтобы проверить версию ядра, используйте команду "uname -a".

Затем измените значение nofile, см. раздел 3.2.

4.3 Постоянный эффект: нет необходимости перезапускать сервер

Установите fs.nr_open= 1200000 fs.file-max=200000 в файле /etc/sysctl.conf, а затем выполните команду sysctl -p, чтобы конфигурация вступила в силу. Как показано ниже:

15.png

4.4 Эффекты просмотра

Проверьте максимальное количество файлов, которые могут быть открыты одним процессом, с помощью cat /proc/pid/limits, как показано ниже:

1612427271613637.png

5. условия

5.1 Изменения в файле не вступают в силу

Описание проблемы

См. главу 3 документации Изменение значения nofile не вступает в силу и остается на прежнем уровне.

Причины и решения

Проверьте файл /etc/profile на наличие операторов ulimit -n xxx и удалите их.

5.2 Общие изменения пользователя не действуют

Описание проблемы

После выполнения шагов в разделе 4.3 этого документа, не требующих перезагрузки сервера, изменения, сделанные обычным пользователем, не вступают в силу, и при подключении к Linux с помощью ssh появляется следующая ошибка: ulimit: open files: cannot modify limit: Operation not permitted

Анализ причин

Эта проблема возникает после обновления openssh, происходит только при ssh-логинах и связана с ssh.

Рецепт

1) Измените файлsshd_config, чтобы изменить#UseLogin noнаUseLogin yes, как показано ниже:

vi /etc/ssh/sshd_config

1622787539250143.png

2) Перезапустите службу ssh с помощью службы sshd restart.