В чем разница между установкой пределов открытых файлов в файле /etc/sysctl.conf vs /etc/security/limits.conf?

Я прочитал два отдельных способа увеличения разрешенного количества открытых файлов (я пытаюсь изменить для root, если это имеет значение).

Один из способов – обновить настройки в /etc/security/limits.conf с помощью следующего:

 * soft nofile 500000 * hard nofile 500000 root soft nofile 500000 root hard nofile 500000 

Чтобы сделать настройки для активной оболочки, похоже, что вы можете просто сделать ulimit -n 500000 , что не требует перезагрузки или выхода / входа в систему, но может потребоваться перезапуск служб (?).


Другой вариант – обновить /etc/sysctl.conf :

 echo 'fs.file-max = 500000' >> /etc/sysctl.conf 

Чтобы сделать настройки для активной оболочки, мы можем сделать sysctl -p и проверить с помощью sysctl fs.file-max .

Так что мой вопрос в том, в чем разница? Есть ли это? Я на Ubuntu 14.04.2 LTS

Разница заключается в объеме и способах применения. Открытые лимиты файлов, установленные через sysctls, применяются ко всей системе, тогда как ограничения, установленные с помощью /etc/security/limits.conf применяются только к вещам, которые соответствуют указанным там критериям. Другое основное отличие состоит в том, что ограничения /etc/security/limits.conf применяются через ulimit и, следовательно, могут быть изменены с большей готовностью, а ограничение sysctl – это, по существу, ограничение лимита памяти в самом ядре.

Как правило, вы почти всегда хотите использовать /etc/security/limits.conf , даже если вы устанавливаете глобальные ограничения с подстановочным знаком, там, где он немного более надежный, и вещи обычно терпят неудачу более изящно, когда попадают с ограничениями на ulimit, чем ограничение пределов распределения памяти ядра.