В 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
Эти значения, конечно, являются только примерами, и вы можете заменить звездочки своим пользователем.