Как я могу увеличить лимит открытых файлов для всех процессов?

32

Я могу использовать ulimit, но думаю, что это влияет только на мой сеанс оболочки. Я хочу увеличить лимит для всех процессов. Это на Red Hat.

countermode
источник
Какая версия Red Hat, кстати? RHEL5?
Mattdm

Ответы:

26

В ответе Джастина рассказывается, как увеличить общее количество открытых файлов для всей системы. Но я думаю, что вы спрашиваете, как повысить лимит для каждого пользователя в глобальном масштабе. Ответ заключается в том, чтобы добавить следующие строки /etc/security/limits.conf:

*               soft    nofile            2048
*               hard    nofile            2048

(Где * означает всех пользователей.)

В самом файле и в нем есть краткая документация man limits.conf. Это реализуется через pam_limits.soмодуль, который вызывается для различных служб, настроенных в /etc/pam.d/.

И, должен признать, я понятия не имею, откуда взялся этот дефолт 1024. И поверь мне, я посмотрел. Я даже пытался без настроенного модуля pam_limits, и он все еще там. Это должно быть где-то жестко, но я не совсем уверен, где.

mattdm
источник
2
Хм ... Я установил это правильно. Выйдите из SSH и вернитесь, и мой мягкий лимит все еще установлен на 1024. Есть ли что-то, что я пропускаю, чтобы сделать это "активным"? Спасибо.
Джошуа Пинтер
@mattdm - Стоит отметить, что в некоторых дистрибутивах Linux упомянутый файл будет находиться по адресу: /etc/limits.conf
Гай Авраам,
13

Согласно статье « Увеличение максимального количества открытых файлов / файловых дескрипторов» (FD) в Linux , вы можете увеличить лимит открытых файлов, добавив запись в /etc/sysctl.conf.

Добавьте директиву config следующим образом:

fs.file-max = 100000

Затем сохраните и закройте файл. Чтобы изменения вступили в силу, пользователям необходимо выйти и снова войти в систему, или они могут просто ввести следующую команду:

# sysctl -p

Вы также можете проверить свои настройки с помощью команды:

# cat /proc/sys/fs/file-max
Джастин этир
источник
Я скептически отношусь к необходимости выхода и повторного входа для этого конкретного параметра, который является общесистемным. (Это касается почти всего в sysctl ...)
mattdm
13

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

1. Шаг: откройте sysctl.conf и добавьте эту строку fs.file-max = 65536

$ vi /etc/sysctl.conf

добавить новую строку и

fs.file-max = 65536

Сохранить и выйти.

2.Step:

$ vi /etc/security/limits.conf

и добавьте ниже упомянутого

* soft     nproc          65535
* hard     nproc          65535
* soft     nofile         65535
* hard     nofile         65535

сохранить и выйти проверить максимальный открытый файл ulimit

# ulimit -a

....
open files                      (-n) 65535
minhas23
источник
6

Но если вы пытаетесь увеличить максимальное количество открытых файлов службы, такой как MariaDB или чего-то еще (используя systemd ), вы должны сделать это непосредственно в файле .service.

/lib/systemd/system/<servicename>.service

Будет что-то вроде этого:

[Unit]
Description=Some Daemon
After=syslog.target network.target

[Service]
Type=notify
LimitNOFILE=49152
ExecStart=/usr/sbin/somedaemon

[Install]
WantedBy=multi-user.target

Полный ответ здесь: Увеличение nproc для процессов, запускаемых systemd в CentOS 7

Матеус Балдассо
источник
Это необходимо поддержать, так как повсеместное распространение systemdнаряду с его текущими изменениями растет в экосистеме Linux. Хотя я бы предложил отредактировать ответ cp -r /lib/systemd/system/mariadb.service /etc/systemd/system/и внести изменения в этот файл, а не в файл общесистемной службы, предоставляемый пакетом.
ILMostro_7
3

за дополнительную плату:

Вы можете найти конфигурацию в другом месте: /etc/security/limits.d/*.conf

Я должен был изменить это. Это не сработало без этого. Формат такой же, как дляlimits.conf

Вальдемар Восински
источник
Мне также пришлось обновить этот файл, чтобы он полностью работал на наших серверах CentOS.
Джон Айсбренер