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

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 Просмотр размеров параметров
В соответствии с политикой модификации, пожалуйста, проверьте размер каждого параметра перед выполнением нижеприведенной операции модификации.
| параметрический | формулировка запроса |
|---|---|
| nofile | ulimit -n |
| nr_open | cat /proc/sys/fs/nr_open |
| file-max | cat /proc/sys/fs/file-max |

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

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.

2) Отредактируйте файл /etc/pam.d/login и убедитесь, что в нем есть следующее, как показано ниже:
требуется сессия pam_limits.so
(3) После завершения настройки, конечный пользователь должен повторно войти в систему и перезапустить проект Tomcat, после чего конфигурация вступит в силу. Как показано на рисунке ниже:

4. значения nr_open и file-max
4.1 Временное вступление в силу
echo 1200000 > /proc/sys/fs/nr_open echo 200000 > /proc/sys/fs/file-max4.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, чтобы конфигурация вступила в силу. Как показано ниже:

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

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
2) Перезапустите службу ssh с помощью службы sshd restart.