Вопрос Как увеличить ограничение открытых файлов для пользователя без полномочий root?


Это происходит на Ubuntu Release 12.04 (точный) 64-разрядный Kernel Linux 3.2.0-25-virtual

Я пытаюсь увеличить количество открытых файлов, разрешенных для пользователя. Это для моего приложения eclipse java, где текущего предела 1024 недостаточно.

Согласно сообщениям, которые я нашел до сих пор, я должен был

/etc/security/limits.conf:

soft nofile 4096
hard nofile 4096

для увеличения количества открытых файлов, разрешенных для всех пользователей.

Но это не работает для меня, и я думаю, что проблема не связана с этим файлом.

Для всех пользователей ограничение по умолчанию - 1024, независимо от того, что находится в /etc/security/limits.conf (я перезагрузился после изменения этого файла)

$ ulimit -n
1024

Теперь, несмотря на записи в файле /etc/security/limits.conf, я не могу увеличить это:

$ ulimit -n 2048

-bash: ulimit: открыть файлы: невозможно изменить предел: операция не разрешена Странная часть заключается в том, что я могу изменить предел вниз, но не может изменить его вверх - даже вернуться к числу, которое ниже исходного предела:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

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

Как root, я могу изменить этот предел на все, что захочу, вверх или вниз. Он даже не заботится о предполагаемом общесистемном пределе в / proc / sys / fs / file-max

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

# ulimit -n 188898
# ulimit -n 
188898

Но даже я получаю eclipse для запуска от имени root, мое приложение по-прежнему выходит из строя из-за исключения «Too Many Open File»!

До сих пор я не нашел возможности увеличить лимит открытых файлов для пользователя без полномочий root.

Как правильно это сделать? Я посмотрел несколько других сообщений, но не повезло!


121
2017-07-11 02:06


происхождения


Также обратите внимание, что после редактирования /etc/security/limits.conf, вам может потребоваться выйти из системы, а затем вернуться, прежде чем вы сможете использовать новый максимальный лимит. Я сделал это и был озадачен ulimit -Hs показывая 1000, когда я только что поднял его до 1000000! Затем я вышел и вернулся, и ulimit показал новую сумму. - Cerin
Для сеанса GUI вы также можете найти важный (Ubuntu 16+) эта тема, - Waldemar Wosiński


ответы:


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

Использовать -S возможность изменить МЯГКИЙ предел, который может варьироваться от 0- {ЖЕСТКИЙ}.

Я на самом деле ulimit в ulimit -S, поэтому он по умолчанию постоянно работает с мягкими ограничениями.

alias ulimit='ulimit -S'

Что касается вашей проблемы, вам не хватает столбца в ваших записях в /etc/security/limits.conf,

Должны быть четыре столбца, но первый в вашем примере отсутствует.

* soft nofile 4096
* hard nofile 4096

В первом столбце описывается ВОЗ, к которому должен применяться предел. '*' - это подстановочный знак, означающий всех пользователей. Поднять лимиты для корень, вы должны явно ввести «root» вместо «*».

Вам также нужно отредактировать /etc/pam.d/common-session* и добавьте следующую строку в конец:

session required pam_limits.so

120
2017-07-11 02:16



Как изменить Hard limit для максимального количества дескрипторов открытых файлов? Моя проблема в том, что мне нужно разрешить моему приложению Eclipse иметь столько файлов, сколько нужно, но предела 4096 недостаточно, и я хочу установить его как можно выше, возможно, 500000. Моя настройка в лимите .conf как вы упомянули со звездой, и все еще жесткий предел не движется. - iCode
вы вышли из системы / перезагрузились на этот раз? ulimit -a покажет вам все ограничения, поэтому вы можете сравнить их, если они изменились. - lornix
Ну, вы обнаружили, что значение / proc / sys / fs / file-max составило 188 897 ... Поэтому я бы сказал, что ваш верхний предел составляет 188 000 (разрешено) и 500 000 (не разрешено). Отмечает, что у вас есть что-то, что требует более 65000 открытых файлов одновременно. Вау. Обычно это обрабатывается на большом железе. Я бы с подозрением относился к программированию, неправильному представлению. (При всем уважении, пожалуйста) - lornix
вот и все: сеанс нужен pam_limits.so, спасибо! - lethalman
Сначала я пропустил подстановочный знак в конце /etc/pam.d/common-session* и просто отредактировал common-session, и даже после перезагрузки он не сработал. Но после добавления той же строки (для pam_limits.so) до common-session-noninteractive, ulimit -n отобразилось новое значение после нового входа (без перезагрузки). FWIW Я пытался изменить предел для root (только). - Lambart


Если вы используете мягкие и жесткие ограничения для каждого пользователя, вы можете использовать что-то вроде:

su USER --shell /bin/bash --command "ulimit -n"

чтобы проверить, действуют ли ваши настройки для этого конкретного пользователя или нет.


15
2017-09-12 10:34





У меня много проблем с тем, чтобы это работало.

Используя следующее, вы можете обновить его независимо от вашего разрешения пользователя.

sudo sysctl -w fs.inotify.max_user_watches=100000

4
2017-07-10 15:41



Я пробовал это, так как у меня такая же проблема, но это не сработало $ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024 - grepmaster