Увеличение ulimit на CentOS

18

У нас есть окно CentOS, которое я пытаюсь увеличить максимальное количество файлов, которые пользователь может открыть. В настоящее время, когда я бегу, ulimit -Snя получаю 1024и ulimit -Hnдает 4096. Мне нужно это число около 6000.

В /etc/sysctl.confя поставил fs.file-max = 100000. У /etc/security/limits.confменя есть следующий набор:

username soft nofile 6000
username hard nofile 65535

Я вышел и снова вошел как, usernameно все еще не вижу своих изменений. Что мне нужно, чтобы изменить это значение?

Все , что я в /etc/security/limits.dэто 90-nproc.conf. Я также убедился, что ulimit не вызывается в моем .bash_profile или .bashrc.

Когда я запускаю, sysctl -pон выплевывает настройки, которые я хочу, и показывает значение, fs.file-maxкоторое я хочу. Но когда я бегу ulimit -Sn, я получаю 1048. Если я пытаюсь бежать, sysctl --systemя получаю error: Unknown parameter "--system".

tubaguy50035
источник
Вы пытались перезагрузиться? Насколько я знаю, эти настройки читаются во время загрузки системы.
Камил
Вам не нужна перезагрузка для этого.
Ксавье Лукас

Ответы:

14

Чтобы заставить /etc/sysctl.confчитать снова беги sysctl -p.

Файл /etc/security/limits.confчитается оболочкой входа в систему, и вы должны закрыть окна активных сессий, если в GUI. Для удаленных входов это вступает в силу при повторном входе.

Ксавье Лукас
источник
1
Запустил это, все еще не видя изменений после перезапуска.
tubaguy50035
@ tubaguy50035 fs.file-max- максимальное количество открытых файлов в системе. Это жесткий лимит, и он не будет отражаться на ulimitзвонках в вашем случае.
Ксавье Лукас
Ох, ну ладно. Разве мне не нужно больше открывать слишком много файлов?
tubaguy50035
@ tubaguy50035 Не связано. Это жесткий системный лимит, который переопределит любое число, указанное выше в limit.conf. Но limit.conf - это то, что применяется. Не могли бы вы попытаться установить жесткие и мягкие ограничения с помощью ulimit непосредственно в новом сеансе и посмотреть, получаете ли вы те же максимумы? Кажется, что-то переопределяет вашу конфигурацию.
Ксавье Лукас
Это говорит, что операция не разрешена. Нужно ли дать пользователю доступ к чему-либо? Я бы предпочел, чтобы веб-пользователь не имел привилегий root.
tubaguy50035
6

Как сказал другой автор, sysctl должен установить значение в работающем ядре. Есть несколько способов установить значение без перезагрузки:

sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system

ИМХО последний метод самый лучший, так как он повторяет порядок, в котором параметры будут применены во время загрузки (и, таким образом, если у вас возникнет конфликт, это станет очевидным).

Примечание: я не уверен, какую версию CentOS вы используете, но по крайней мере на 7 я столкнулся с проблемой, когда, если dracut перестраивает initramfs по какой-либо причине (например, при установке нового модуля ядра), он будет копировать содержимое /etc/sysctl.* в initramfs, которое затем будет выполнено systemd-sysctl на этом этапе, даже если вы позже удалите эти записи из /etc/sysctl.conf.

В моей среде я отредактировал модуль systemd dracut, чтобы исключить /etc/sysctl.* из этой среды (так как эти настройки будут установлены после монтирования rootfs и запуска systemd-sysctl снова). Это просто ошибка, с которой вы можете столкнуться.

Боско
источник
Я на CentOS 6.5. Также обновил мой вопрос с результатами некоторых из этого.
tubaguy50035