Как увеличить лимит открытых файлов для пользователя без полномочий 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