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

115

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

Я пытаюсь увеличить количество открытых файлов, разрешенных для пользователя. Это для моего приложения ecplise 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, мое приложение все еще падает из-за исключения «слишком много открытых файлов»!

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

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

задан iCode 11.07.2012 в 04:06
источник

3 ответа

113

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

Используйте параметр -S , чтобы изменить предел SOFT , который может варьироваться от 0 до { HARD }.

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

alias ulimit='ulimit -S'

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

В вашем примере должно быть ЧЕТЫРЕ КОЛЛА.

* soft nofile 4096
* hard nofile 4096

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

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

session required pam_limits.so     

ответ дан lornix 11.07.2012 в 04:16
15

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

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

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

    
ответ дан Jeroen Teeuwen 12.09.2013 в 12:34
4

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

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

sudo sysctl -w fs.inotify.max_user_watches=100000     

ответ дан Layke 10.07.2015 в 17:41