Чому він не може пропустити 4096 максимум відкритих файлів для не-root користувачів?


13

Я не можу, здається, збільшувати nofileліміт для некоріозних користувачів на Ubuntu 14.04, незважаючи на дотримання всіх відповідей StackExchange, пов'язаних із цією проблемою. Поки що я маю:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

$ cat /proc/sys/fs/file-max
101232

Перезавантажили, увійшли та:

$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted

Все ще якимось чином, здається, існує обмеження в 4096 макс. Для не-root користувачів.


У мене точно такий самий випуск на робочому столі Ubuntu 16.10. Що б я не намагався, обмеження є або 1024, або 4096.
NathanAldenSr

Відповіді:


13

Використовуючи Ubuntu 14.04, я отримав описаний жорсткий ліміт:

user@notebook:~$ ulimit -Hn 4096  

Я міг би знизити його за допомогою ulimit, але не збільшити його так, як описує це питання. Як описано в посібнику ulimit:

тільки корінь може збільшити жорстку межу

Тому я спробував встановити вищу межу приблизно /etc/security/limits.confтак:

user hard nofile 9999 

і свіжий вхід на зразок ssh localhost -l userдав мені новий ліміт:

user@notebook:~$ ulimit -Hn 9999

Сподіваюся, це теж працює для вас.


Дякую TomTomTom. У мене вже є така зміна в /etc/security/limits.d/custom.conf. Я намагався ввести його безпосередньо в /etc/security/limits.conf, як ви запропонували, і я все одно отримую "bash: ulimit: відкриті файли: не можу змінити ліміт: Операція не дозволена".
Кофеїн Кома

Я - лише здогадуюсь - одна з двох причин, чому це не працює для вас:
TomTomTom

1
Займав мене занадто довго, щоб редагувати неповний коментар. Ось ми: я - лише здогадуюсь - одна з двох причин, чому це не працює для вас: 1. /etc/security/limits*не читається вашим механізмом входу - з невідомих причин. 2. В іншому місці ваш жорсткий ліміт встановлений на 4096, і "тільки root може збільшитися ...". Ви можете перевірити свої профілі на зразок .bashrc(залежно від вашої оболонки), або ви можете перевірити /etcінші місця, де можуть бути встановлені обмеження, наприклад find /etc | grep -e ulimit -e 4096 -e nofile. BTW: ти спробував ssh? І: ви змінилися, /etc/ssh/sshd.confщоб чомусь уникати PAM?
TomTomTom

Так - весь вхід здійснюється через ssh. Я відключив UsePAM - кілька посібників рекомендують це як частину дозволу лише входу на основі ssh-ключа. Я спробую увімкнути його тимчасово, просто щоб побачити, чи це проблема. Дякую!
Кофеїн Кома

Afaik, PAM - це те, що слід читати /etc/security/limits*- ви можете спробувати включити PAM просто для перевірки цього. Я спробую відключити PAM, щоб побачити, яку різницю це має, і повідомлятиму результати. --- Так! Це воно! Якщо вимкнено PAM, мій ліміт також становить 4096, хоч встановлено 9999 дюймів /etc/security/limits.conf.
TomTomTom

4

Ця стаття , я думаю, стосується вашої проблеми.

В основному вам слід скористатися командою ulimit для збільшення доступних ресурсів.

Наприклад:

Використовуйте таку команду для відображення максимальної кількості дескрипторів відкритого файлу:

cat /proc/sys/fs/file-max

Щоб побачити жорсткі та м'які значення, видайте команду наступним чином:

# ulimit -Hn
# ulimit -Sn

Щоб побачити жорсткі та м'які значення для httpd або користувача oracle, видайте команду наступним чином:

# su - username

Щоб виправити кількість максимальних файлів, ви можете збільшити максимальну кількість відкритих файлів, встановивши нове значення в змінній ядра / proc / sys / fs / file-max наступним чином (вхід як корінь):

# sysctl -w fs.file-max=100000

Вище команда примушує обмежити 100000 файлів. Вам потрібно відредагувати /etc/sysctl.confфайл і поставити наступний рядок, щоб після перезавантаження налаштування залишилося таким, як є. Для цього додайте конфігураційну директиву так:

fs.file-max = 100000

Збережіть і закрийте файл. Користувачам потрібно вийти та знову увійти, щоб зміни набрали чинності, або просто ввести таку команду:

# sysctl -p

Перевірте свої настройки командою:

# cat /proc/sys/fs/file-max

або:

# sysctl fs.file-max

Вищеописана процедура встановлює загальносистемні обмеження дескрипторів файлів (FD), однак ви можете обмежити httpd(або будь-якого іншого користувача) користувача певними обмеженнями, відредагувавши /etc/security/limits.confфайл шляхом редагування /etc/security/limits.confта встановити обмеження таким чином:

httpd soft nofile 4096
httpd hard nofile 10240

Потім перевірте їх:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

Якщо у вас є проблема в інших дистрибутивах Linux, перевірте /etc/pam.d/loginі переконайтеся, що ви pam_limits.soактивовані, наприклад

session required pam_limits.so

2
Привіт Брук. На жаль, я вже спробував пропозиції з цієї статті. Хоча 'ulimit -Hn' був для мене новим; він друкує 4096, межа, на яку я постійно натикаюся.
Кофеїн Кома

0

Якщо це Служба, ви можете спробувати встановити ліміт на /etc/systemd/system/{ServiceName}.serviceдодаванняLimitNOFILE=65536


Ubuntu 14.04 не використовує systemd за замовчуванням.
number5

Ubuntu 16.04, Tomcat 8 працював на мене
Арджанг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.