Это происходит в 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.
Как мне правильно сделать это? Я посмотрел на несколько других сообщений, но не повезло!
/etc/security/limits.conf
вам может потребоваться выйти из системы, а затем снова войти в нее, прежде чем вы сможете использовать новый максимальный предел. Я сделал это, и был сбит с толку,ulimit -Hs
показав 1000, когда только что поднял его до 1000000! Затем я вышел из системы и снова вошел, и ulimit показал новую сумму.Ответы:
Команда
ulimit
по умолчанию изменяет ограничения HARD, которые вы (пользователь) можете снизить, но не можете повысить.Используйте опцию -S для изменения предела SOFT , который может варьироваться от 0 до { HARD }.
Я на самом деле псевдонимы ,
ulimit
чтобыulimit -S
, так что по умолчанию мягких ограничений всего времени.Что касается вашей проблемы, вы пропустите столбец в ваших записях в
/etc/security/limits.conf
.Там должно быть ЧЕТЫРЕ столбца, но первый отсутствует в вашем примере.
В первом столбце описывается ВОЗ, на которую должен претендовать предел. «*» - это подстановочный знак, означающий всех пользователей. Чтобы повысить ограничения для root , вы должны явно ввести «root» вместо «*».
Вам также нужно отредактировать
/etc/pam.d/common-session*
и добавить в конец следующую строку:источник
/etc/pam.d/common-session*
и только что отредактировалcommon-session
, и даже после перезагрузки он не работал. Но после добавления той же строки (дляpam_limits.so
) вcommon-session-noninteractive
,ulimit -n
отображается новое значение после нового входа в систему (перезагрузка не требуется). FWIW Я пытался изменить ограничение для root (только).Если вы используете мягкие и жесткие ограничения для каждого пользователя, вы можете использовать что-то вроде:
проверить, работают ли ваши настройки для этого конкретного пользователя или нет.
источник
У меня много проблем, чтобы заставить это работать.
Использование следующего позволяет обновлять его независимо от вашего разрешения пользователя.
источник
$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024