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

Это происходит в Ubuntu Release 12.04 (точная) 64-битное ядро ​​Linux 3.2.0-25-virtual

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

Как корень, я могу изменить это ограничение на то, что я хочу, вверх или вниз. Кажется, он даже не заботится о якобы общесистемном ограничении в / 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.

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

3 ответа

Решение

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

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

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

alias ulimit='ulimit -S'

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

Там должно быть ЧЕТЫРЕ столбца, но первый отсутствует в вашем примере.

* soft nofile 4096
* hard nofile 4096

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

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

session required pam_limits.so

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

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

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

ulimit -S -n 4096

Это должно увеличить ваш мягкий предел для открытых файлов (-n) до 4096.

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

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

sudo sysctl -w fs.inotify.max_user_watches=100000
Другие вопросы по тегам