Збільшення безмежжя на 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".


Ви намагалися перезавантажити? Наскільки мені відомо, ці налаштування читаються під час завантаження системи.
Каміль

Для цього вам не потрібно перезавантаження.
Ксав'є Лукас

Відповіді:


14

Щоб змусити /etc/sysctl.confчитати знову, запустіть sysctl -p.

Файл /etc/security/limits.confзчитується оболонками для входу, і ви повинні закрити вікна активних сеансів, якщо в графічному інтерфейсі. Для віддалених входів воно набуває чинності при перегляді.


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

Останній метод IMHO є найкращим, оскільки він повторює порядок застосування параметрів під час завантаження (і, таким чином, якщо у вас конфлікт, це стане очевидним).

Примітка. Я не впевнений, яку версію CentOS ви використовуєте, але в 7 принаймні я зіткнувся з проблемою, коли якщо Dracut перебудує initramfs з будь-якої причини (наприклад, при встановленні нового модуля ядра), він скопіюється вміст /etc/sysctl.* в initramfs, який потім буде виконаний systemd-sysctl протягом цієї фази, навіть якщо пізніше ви видалите ці записи з /etc/sysctl.conf.

У моєму середовищі я відредагував модуль ярлика systemd, щоб виключити /etc/sysctl.* з цього середовища (оскільки ці налаштування будуть встановлені, коли rootfs змонтовані та systemd-sysctl запуститься знову). Ви можете просто зіткнутися з дітлахом.


Я на CentOS 6.5. Також оновив моє запитання з результатами деяких із цього.
tubaguy50035
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.