Назад | Перейти на главную страницу

Удаление ulimit из boot / init

В CentOs, начиная с версии 6, по умолчанию установлено ограничение 1024 для каждого пользователя, т.е. /etc/security/limits.d/90-nproc.conf

*          soft    nproc   1024

Мне нужно запустить серверную службу / демон «myservice», для которой требуется большее значение в пределах процесса. Поэтому мне нужно переопределить предварительно настроенный предел (1024). Для этого я попытался создать отдельные записи для root и myuser (пользователя, запускающего myservice).

myuser          soft    nproc   5000
root            soft    nproc   5000

а потом

service myservice restart

теперь лимит был увеличен и, похоже, проблема решена! но это было временно, после перезагрузки системы лимит снова стал 1024. (НОТА: myservice был настроен для запуска при загрузке)

Похоже, что это произошло из-за процесса инициализации, который отвечает за запуск каждой службы в системе, следовательно, «myserivce» как дочерние унаследованные родительские ограничения (по умолчанию init имеет ограничение 1024).

Я погуглил, чтобы узнать, есть ли способ увеличить лимит для инициализации, но мне не повезло, чтобы его найти! Я пытался изменить / etc / security / limits.d / 90-nproc.conf

*          soft    nproc   5000

но все равно, после перезагрузки init все еще имеет ограничение 1024, а myservice также имеет ограничение 1024

НОТА: если я перезапущу свой сервис из командной строки, он получит принятые ограничения (5000), но я хочу запускать его автоматически после каждой перезагрузки.

Может ли кто-нибудь посоветовать мне, как я могу увеличить лимит процесса для «myservice» и сохранить его после перезагрузки?

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

Кроме того, это ограничения для каждого пользователя, но не обязательно общесистемные ограничения ядра. Возможно, вам потребуется установить значение с помощью соответствующей команды sysctl. (Сделайте это постоянным в /etc/sysctl.conf.)

Например, это установит максимум ядра для файловых дескрипторов. (Ядро отслеживает процессы с открытыми файлами, поэтому этот же ключ связан с обоими значениями ulimit.

sysctl -w fs.file-max=10000

(Я думаю, что это, вероятно, та часть, которой не хватает устойчивости в вашей текущей конфигурации из-за ее отсутствия.)

Затем вы можете установить ограничения для каждого пользователя в /etc/security/limits.conf.

* soft nofile 2500
* hard nofile 5000

И /etc/security/limits.d/90-nproc.conf.

* soft nproc 2500
* hard nproc 5000

Эти значения, конечно, являются только примерами, и вы можете заменить звездочки своим пользователем.